938 :
nobodyさん:02/11/16 12:23 ID:0J3aGqnO
$value =ereg(~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg);
長いと頭がこんがらがって・・・
誰かこの意味を教えてくださいm(_)m
939 :
nobodyさん:02/11/16 12:25 ID:0J3aGqnO
間違えた。こうですた。
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
16進数?
意味ったって、16進を10進の文字コードに置換してるだけだろ
URLデコード
943 :
nobodyさん:02/11/23 02:46 ID:LSKuSLu9
ある属性が含まれてるタグのみマッチさせたいってときは
どんな風な正規表現を組み立てたらいいんでしょう?
$attr ='class';
<\s*(?:\w+)(?:\s+(?:(?:$attr\s*=\s*".*?")|(?:\w+\s*=\s*".*?")))+\s*/\s*>
ってやったのですが、これだと
<a href=".."> みたいな属性が指定してあるタグ全部にひっかかってしまいます。
<\s*(?:\w+)(?:\s+(?:(?:$attr\s*=\s*".*?")|(?:\w+\s*=\s*".*?")))+\s*/\s*>
~~~~~~~~~~~~~~~~~~~
ここでマッチしてるんじゃない?
945 :
nobodyさん:02/11/23 10:11 ID:LSKuSLu9
>>944 ありがとうございます。
うーん、それを外すと
<a id="index" href=".."> みたいな
他の属性あるとき引っかからなくなりますよね。
とりあえずタグだけひっかけて
それから id が含まれるかどうか
別の正規表現で調べたほうがいいのでしょうか。
/<(\w+)(?=[^>]*$attr)[^>]*>(?:.*?<\/\1>)?/o;
947 :
nobodyさん:02/11/23 22:14 ID:OeWtSfyo
>>946 <a href="ideon">なんかにもかかっちゃわないか??
/<(\w+)(?=[^>]*\b$attr\b)[^>]*>(?:.*?<\/\1>)?/o;
949 :
nobodyさん:02/11/24 19:01 ID:GzYFPBi3
>>948 <a href="id/zero"> だと駄目じゃない。
".." の中を排除しなきゃだめか。
〜にマッチする、ただし特定の単語は除くという場合どう書いたらいいでしょうか。
Wikiに使うWikiNameで特定の単語は除外したいんですが。
$WikiName = '([A-Z][a-z]+([A-Z][a-z]+)+)';
これで例えば Regularという単語はマッチしないようにしたいんですが。
あと950踏んだので次スレ必要ならば立てますね。
>>950 それ、Regular にはマッチしないんではないかと。
特殊なページ名にマッチして欲しくないなら
特殊なページ名は増えてくだろうから
マッチしてからきりだして比較のほうがすっきりすると思う。
うーん、Wiki の場合そこの正規表現は何度も使われるし、
変に凝った正規表現にしちゃうと
メンテナンス性、速度の二点において不利になるかと。
PukiWiki のサイトでリクエストしてみたら?
指定した単語リストを WikiName として自動認識しない処理がほすい、ぐらいで。
やっぱそうですよねぇ。
しかしそのリクエストはWikiの存在理由に関わるのでなかなか取り入れてもらえないのです。
過去に数回要望があったみたいなんですが。
しかしプログラミング言語の型名とか(の途中が)勝手にWikiNameになると
気持ち悪くてしょうがないなぁ。
CClassNameとかだとClassNameだけ引っかかっちゃうんですよね。
この場合↑も引っかかるように変えれば気持ち悪くはなくなるのか。
プログラムのソースの場合、
文脈を読んで WikiName にして欲しいよね。どうせなら。
関数名とか意味あるとこだけ。
ちなみに私は
$WikiName = '([A-Z][a-z]+([A-Z][a-z]+)+)';
による自動マッチ自体不要派です
英語圏じゃ便利かもしれないけど
日本語ではいまいちだし、
今みたいにサイトを作る、っていう目的で運用されることが多い中、
意図しないところでリンクされるのは邪魔でしかない。
それに、PukiWiki はアイデアメモとかそういう方向進んでないし。
ってスレ違いだな・・・。
スペース(OR Tab)区切りのファイルから値を変数に入れるのに、
@array = /(\S+)/g;
$top=@array[0];
$bottom=@array[1];
$rval=@array[2];
$lval=@array[3];
よりみじかく書けますか?
($top, $bottom, $rval, $lval)= /(\S+)/g;
配列 @array を再利用するなら
($top, $bottom, $rval, $lval)= @array= /(\S+)/g;
959 :
nobodyさん:02/11/27 16:47 ID:YQilorq2
( $top, $bottom, $rval, $lval ) =split /\s+/;
だろう。
ちなみに、split /\s+/ は最適化されてるらしいから
m 使うより速い(はず)
他で聞くよりもここで聞いた方が早そうなので聞きます。
【日本語の正規表現】がどうしてもめんどくさい時に
KAKASIなどを使って`テキスト'を【ローマ字の読み】に変換してから正規表現にかけます。
その後、変換された`テキスト'を元の【日本語のテキスト】に
戻すことができればいいのですが、この方法を誰かしりませんか?
KAKASIで変換する際に【漢字⇔読み】の変換テーブルを生成してくれれば
話は楽なのですが、何か良い方法ないないでしょうか?
スレチガイ、スマソ。
正規表現の基本的な質問を致します。
[^y]は文字の否定ですよね?
「yahoo以外」
という風に
文字列の否定
はどうやるのでしょうか?
[^(文字列)]
すみません!!すみません!!
w3m -dump
http://www.city.sendai.jp/kankyou/toshisuishin/guide/02/01.html >event.txt
でテキスト化したテーブルを
"┌"
で区切り文字として、テーブル毎に1ファイル生成したいのです。
分割の際は、csplitコマンドを使いたいのですが、こいつはマルチバイトに対応していない
ので、odなどで調べて実際のコードでマッチさせたいのですが、
やり方がわかりません!!
event.txtの中には"┌"が12個あるので、イメージとしては
% csplit -f table_ event.txt /"┌"/ {12}
こんな感じですが、
マルチコードがダメなんで、
% csplit -f table_ event.txt /"『ここにコード』"/ {12}
としたいのです!!
どなたかアドバイス下され!
困っております!
965 :
964:02/12/20 10:57 ID:???
12個
↓
24個
の間違いでした。
966 :
nobodyさん:02/12/22 18:48 ID:JvN7Mbhl
Perl 5 なのですが、マッチした部分を、さらに置換するにはどうすれば良いでしょうか?
$a = "<ul><\/p><p><li><\/li><\/p><p><\/ul>";
$a =~ s/(<ul>.*?<\/ul>)/\1 = s/<\/p><p>//g;/g;
↑こんな書き方はないみたいですけど、なんとなく私のやりたいことは分かってもらえるかと思ったので、ちょっと書いてみました・・・
うまく説明できないのですが、<ul> タグ間にある <p> タグを取り除きたいのです。
なにか良い方法はないでしょうか?
>>966 <ul>の中の<p>を除去するだけなら
<ul>の中の<p>にマッチする表現を一つ書けばすむんじゃないの?
そもそも$aってばちゃんと表示してくれるの?
ブロックのネスティングがおかしいように思うけれどんも。
969 :
966:02/12/22 22:49 ID:JvN7Mbhl
>>967 <ul>の中の<p>にマッチする表現とは、どのように書けば良いのでしょうか?
970 :
966:02/12/22 22:51 ID:JvN7Mbhl
>>967 <ul>の中の<p>にだけマッチするように表現・・・できますか?
私などでは、まったく分かりません・・・
971 :
nobodyさん:02/12/22 23:39 ID:JvN7Mbhl
s/(<ul>).*?<p>.*?(<\/ul>)/\1\2/g;
s/(<ul>).*?<\/p>.*?(<\/ul>)/\1\2/g;
↑こうやる・・・とか ^^; ?
972 :
966:02/12/22 23:42 ID:JvN7Mbhl
やっぱ駄目か・・・
973 :
966:02/12/22 23:45 ID:JvN7Mbhl
$a =~ s/(<ul>.*?)<p>(.*?<\/ul>)/\1\2/g;
$a =~ s/(<ul>.*?)<\/p>(.*?<\/ul>)/\1\2/g;
↑これを 100 回くらい繰り返せば、まず大丈夫・・・って、なんてアホな方法 ^^;
>>970 良く分からんけど
while($text =~ s|(<ul>.*)</?p>(.*</ul>)|$1$2|){1;}
とかループで回してみたり。
一歩間違うと無限ループ直行ですが。
975 :
v:02/12/22 23:51 ID:9dxCZgOh
976 :
966:02/12/23 00:03 ID:VBUKjkTD
>>974 あ!なるほど、ループすれば良かったのか!!
どうもです、やってみます。
perlって$1等で参照を変数のように扱えたんじゃなかったかな?
<ul>が複数あると結局ループを使ってしまうけど。
$1は定数(read-only)ですがなにか?
979 :
977:02/12/23 21:51 ID:???
いや、$1に代入するんじゃなくて、
<ul></ul>間が取り出せれば一回で済むってことが言いたかったのです。
なぜPart2よりも上に・・・
981 :
nobodyさん:02/12/24 18:10 ID:Hyg/Prvk
え、Part 2 があったの!?
ぜんぜん知らなかった・・・ ^^;
982 :
nobodyさん:02/12/24 18:55 ID:YHFX+I6W
r
983 :
nobodyさん:02/12/24 18:55 ID:YHFX+I6W
1000
984 :
nobodyさん:02/12/24 18:56 ID:YHFX+I6W
1000
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
^^;
お前ら。今日はクリスマスですよ。こんなことしてていいんですか?
>>966 sub match{
my($temp) = $_[0];
$temp =~ s/(<p>|<\/p>)//g;
return $temp;
}
$a = "<ul><\/p><p><li><\/li><\/p><p><\/ul>";
$a =~ s/(?<=<ul>)(.*)(?=<\/ul>)/&match($1)/eg;
print $a;