正規表現道場@2ch Part2
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/11/24 22:57ID:LrbVcl3Yこのスレは有用そうな正規表現を紹介したり、どう表現したらいいかわからないときに
質問をしたりするためのスレッドです。
質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。
リンクなどは>>2-5のあたりに。
0002nobodyさん
02/11/24 22:58ID:???http://www.din.or.jp/~ohzaki/perl.htm
正規表現メモ
http://www.kt.rim.or.jp/~kbk/regex/regex.html
Regex::Diagram.pm
http://www.cc.rim.or.jp/~midorin/mad-p/RegexDiagram.html
正規表現
http://www.cc.rim.or.jp/~midorin/mad-p/perl/benkyou/PRC2kRegex/
UNIX正規表現入門 目次
http://www01.u-page.so-net.ne.jp/jc4/hiroyuki/rex_index.html
Regular Expression(Riue ちゃんの正規表現講座) - Index
http://www.sixnine.net/regexp/
ほとんどは↓のリンク集にまとまっています。
正規表現最新リンク集2002
http://www2.famille.ne.jp/~akio1998/l_grep.html
0003nobodyさん
02/11/24 23:00ID:???正規表現道場@2ch
http://pc.2ch.net/test/read.cgi/php/996105815/
0004nobodyさん
02/11/25 00:15ID:oyWFxt5Hコード書く度に思い出すはめんどい。ていうか忘れてる。
0005あぼーん
NGNG0006Name_Not_Found
02/11/29 22:13ID:/ULd/3Z00007nobodyさん
02/12/05 05:07ID:5X+JpwfGどうやるんでしょうか?
例えばテキスト中の「パーマン」は全部「プーヤン」に置換したいんだけど、
「パーマン3号」だけはスルーする、という風にするには。
一度全部「プーヤン」に変換してから「プーヤン3号」から「3号」を取る、
という方法しかないんでしょうか?お願いします。
0009nobodyさん
02/12/05 06:15ID:5X+JpwfGやりたいことは掲示板にurlを書くと自動リンクになるようにしたいんですけど、
後で修正しようとすると先ほど自動で貼ったアンカータグの中のurlも、
そのアンカータグで囲まれたurlにも再度アンカータグを貼ってしまいます。
(?!3号)みたいにして括弧で囲んで?!を付ければ無視されるのかなと思い、
$comment =~ s/(?!<a href=\")(https?|ftp|gopher|telnet|whois|news)\:([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)(?!<\/a>)/<a href=\"$1\:$2\" target=\"_blank\">$1\:$2<\/a>/ig;
としてみたのですが無理でした。
説明不足ですいません。
0010Name_Not_Found
02/12/05 06:32ID:???0011nobodyさん
02/12/05 07:02ID:5X+JpwfGそれを修正します。
0012nobodyさん
02/12/05 07:44ID:???すいません、質問の意味がわかりました。
cgiで表示させるだけなら、その時にだけ自動リンクを使えばいいですよね、
でも一日ずつhtmlファイルで保存してそれを読み込んでくるタイプなので、
元ファイルにすでにアンカーが貼られてるんですよ。
だからそれを修正しなければならない、とこういうわけです。
掲示板というよりニュースサイトのようなものを作ってます。
001312
02/12/05 07:47ID:???× アンカー
○ <a href=""></a>
0014Name_Not_Found
02/12/05 08:16ID:0NYAnUxi一日目:
これすごい http://www.aaa.com/article.pl?id=11
二日目:
<a href="http://www.aaa.com/article.pl?id=11">これすごい</a>
もっとすごいの発見 http://def.ghi.com/?bbs=a
三日目:
<a href="http://www.aaa.com/article.pl?id=11">これすごい</a>
<a href="http://def.ghi.com/?bbs=a">もっとすごいの発見</a>
....
以前の記事を修正しないなら、
追加分の生データだけパースして html に追加してく処理考えたほうがいいと思う。
で、アンカータグの中身、というよりタグの中身を処理対象外にする方法は
http://www.din.or.jp/~ohzaki/regex.htm を参照。
001512
02/12/05 10:00ID:5X+JpwfGありがとうございます、やりたかったのは確かにそんな感じです。
正確には、
一日目
これすごい http://www.aaa.com/article.pl?id=11
二日目:
これすごい <a href="http://www.aaa.com/article.pl?id=11">http://www.aaa.com/article.pl?id=11</a>
もっとすごいの発見 http://def.ghi.com/?bbs=a
といった感じです。
で、その大崎さんという方のサイトを見て修正したのですが、
確かにタグの中のurlはそのままになったんですが、タグに囲まれたurlの方が
修正するたびに二重に<a href></a>で囲まれていきます(;´Д`)。
<a href>と</a>の間にあるもの以外を全て置換しろ、という正規表現が書ければいいのですが
自分の力量ではとても、、、。
難しいです。
001612
02/12/05 10:05ID:???0017nobodyさん
02/12/05 10:20ID:???0018Name_Not_Found
02/12/05 10:45ID:0NYAnUxiそれはもう処理の内容を考え直した方がいいと思われ。
基本的に追加なんだろうし。
html をこんな風にして、
<!-- news here -->
これすごい <a href="...">...</a>
で、追加分を html に変換後、
出力ファイルの <!-- news here --> をサーチして追加分をそこに足す、
みたいなやりかたはどう?
過去記事も頻繁に修正する可能性があるなら元データを残すやり方にするべき。
もっとも、リクエスト毎に html に変換するんではなく、
スタティックな html をあらかじめ作っておくってやり方はそのままでいいと思う。
0019Name_Not_Found
02/12/05 10:48ID:???0020nobodyさん
02/12/05 17:44ID:???それじゃ<br>が入ってる場合は最初の行しか置換されないし、
その最初の行も最後の一文字が無視される罠。
002112
02/12/05 19:13ID:5X+JpwfG今17さんのでやってみたのですが、確かに20さんがおっしゃるような結果が出てしまいました。
あと、メールアドレスが置換されないみたいです。
>15
まさにそのやり方です、<!-- news here -->のようなコメントをサーチする。
ただ、僕は修正がすごく多いです、、、。
元データを残すやり方は、人様のスクリプトを改良してるので
一からやり直しになるし、またバージョンアップ版が出た時の互換性とか考えると
ツライですねぇ。
もちろん、著作権表示と改造表示は出してます。
002212
02/12/05 19:37ID:???0023nobodyさん
02/12/06 00:05ID:0LEQc9+/とりあえず10分ほどやってみたが出来なかった、
ウチの上司なら出来ると思うが昨日から出張‥‥
0024nobodyさん
02/12/06 00:14ID:???一旦アンカータグ消せばいいんジャネーノ?的外れ?
0025nobodyさん
02/12/06 00:40ID:???修正用のテキストエリアに読み込む時に、元ファイルが例えば
<a href="http://www.yahoo.co.jp/">http://www.yahoo.co.jp/</a>
こういうのばっかだったらそれでいいかも知れんが、実際は
<a href="http://www.yahoo.co.jp/">これヤフー</a>
みたいのも混ざってるってことでしょ。
0026nobodyさん
02/12/06 00:42ID:???0027Name_Not_Found
02/12/06 03:26ID:N6C9SdnH追加と修正は別フェイズにするの。
修正時は余計な変換処理無しで html を直接弄って、
追加の時は追加分だけ変換処理して <!-- news here --> につっこむの。
ただ、直接 html 弄れるフォームがあるってのは
心理的に好きじゃないなぁ。
なんだか正規表現と関係なくなってきたなぁ…
0028nobodyさん
02/12/06 05:06ID:???「変数$newsの中から、アンカータグの中のものと、アンカータグに囲まれた部分は
無視してそれ以外を置換する」
ということがサクっと簡単に出来るものだと思ってました。
長く引っ張ってしまって申し訳ないです、正規表現、一から出直して勉強してきます。
0029nobodyさん
02/12/06 12:37ID:???$msg =~s{<a href=".*?"><a href=".*?">(.*?)</a></a>}{<a href="$1">$1</a>}g;
0030Name_Not_Found
02/12/06 14:31ID:???そういう処理しなきゃいけない状況が不毛なんだってば。
0033Name_Not_Found
02/12/07 04:46ID:705rdiGCおばかなプログラムが増えていく状況を助長してはいけません。
「ライトついてますか?」でも読んでくれ。
0035Name_Not_Found
02/12/07 11:04ID:???0036nobodyさん
02/12/08 12:52ID:???<code></code>で囲んだ間は、オリジナルタグを無効になるように処理したいです。
でも、<code>〜</code>〜</code>こういう風に書かれたら
途中で終わってしまて困ってます。
どうしたら良いでしょうか?
003836
02/12/08 13:40ID:???簡単に言うと、
<code>〜</code>hogehoge</code>
これを
<blockquote>〜</code>hogehoge</blockquote>
こうやって置き換えをしたいのですが、
<blockquote>〜</blockquote>hogehoge</code>
になってしまいます。
s/<code>(.*?)<\/code>/i;
$t =$1;
$t =~ /</</i;
$t =~ />/>/i;
s/<code>(.*?)<\/code>/<blockquote>$t</blockquote>/i;
ソースはこんな感じです。どうしたらいいでしょう…
0039nobodyさん
02/12/08 14:16ID:???>こういう風に書かれたら
っていうことはユーザーの入力を処理するってこと?
それならまずタグの閉じ忘れチェックをすればいいんじゃないかな。
004037
02/12/08 15:01ID:???s#<code>(.*)</code>#'<blockquote>'.(($_=$1)=~s/(<|>)/$conv{$1}/g,$_).'</blockquote>'#e;
004137
02/12/08 15:03ID:???@conv{qw(< >)}= ('<', '>');
s#<code>(.*)</code>#'<blockquote>'.(($_=$1)=~s/(<|>)/$conv{$1}/g,$_).'</blockquote>'#e;
0042nobodyさん
02/12/08 15:05ID:???$t =~ s/<code>(.*)<\/code>/<blockquote>$1<\/blockquote>/i;
print $t ;
これでどうよ?
0043nobodyさん
02/12/08 15:09ID:???その辺は適当に読み直してくれといいつつ書いてみる。。
$t = '<code>〜</code>hogehoge</code>';
$t =~ /</</i;
$t =~ />/>/i;
$t =~ s/<code>(.*)<\/code>/<blockquote>$1<\/blockquote>/i;
print $t ;
間違ってたらごめんよ。
0044nobodyさん
02/12/08 15:13ID:???$t =~ /</</g;
$t =~ />/>/g;
$t =~ s/<code>(.*)<\/code>/<blockquote>$1<\/blockquote>/i;
痛いな、漏れ。
0045Name_Not_Found
02/12/08 17:44ID:cySwFV0Oとかの場合、どこからどこまでが blockquote?
どういうシチュエーションなのかよくわからんちん。
textarea に書き込まれた文字を処理するのか
テンプレートファイルでの処理用のタグを導入してるのか…
0047Name_Not_Found
02/12/08 18:00ID:cySwFV0O指摘すると切れるし。
0048nobodyさん
02/12/08 18:26ID:???0049Name_Not_Found
02/12/09 06:04ID:7ZfXL1H90050nobodyさん
02/12/09 11:29ID:N8zphpYN↓を書いてみました。
^[0-9]*\.{1}[0-9]$
でも、これだと必ず小数点を書かないといけません…。
例えば「12」という数値を通したい場合
「12.0」にしないとエラーになってしまうのです。
「12」でも通るようにするためにはどう書けば良いのでしょうか。
0051nobodyさん
02/12/09 11:50ID:???.1 の形式を許可するなら
^-?\d+(?:\.\d+)?|\.\d+$
005250
02/12/09 12:07ID:???^\d+(?:\.\d+)?$
とすると希望の動作しました!ありがとうございます。
005350
02/12/09 12:31ID:N8zphpYN^\d+(?:\.\d+)?$
これを丸々否定したいのですが、
^[^\d+(?:\.\d+)?]$
だとダメでした。
どのようにすれば良いでしょうか…。何度もスイマセン。
何がやりたいかというと、とあるcgiでの入力チェックを行う際に
「有効書式設定」「無効書式設定」というのがあります。
そこにフォームからの入力チェックを正規表現で設定できるのですが、
「有効書式設定」に先ほどの正規表現を入力すると
必ず入力しなくてはならなくなりました。
ですので「無効書式設定」に先ほどの正規表現を
丸々否定したものをすれば、必ず入力しなくても良くなるのでは
と思って質問させていただいてます。
005550
02/12/09 17:05ID:N8zphpYN許可したくないものまで許可できてしまいました…。
ですので、「整数と小数、または、0文字を許可」という条件を
「有効書式設定」の所に設定し直そうと思います。
整数と小数の部分は
^\d+(?:\.\d+)?$
でいけてるのですが「または、0文字を許可」の部分を
↑にどのように付け加えればよいのかわかりません。。
すいませんがよろしくお願いします。
0056Name_Not_Found
02/12/09 17:29ID:Pf18ytiH0文字を許可を入れる場合の定石は、
処理ループの(ループだよね?)最初で /^$/ 等でマッチさせる。
一つの正規表現でやるよか速くなる可能性高いからそっちも考えて。
"または" がきたら、普通に if とかの使用も考えること。
005755
02/12/09 17:40ID:N8zphpYN今回、cgiそのものを書いているのではなく
cgiを設定する画面が存在して、その「有効書式設定」部分に
正規表現を書けば、自動的に入力チェックを行ってくれるというものです。
┌―――――――┐
有効書式設定:| |
└―――――――┘
cgiのこのテキストボックスに書くって感じです。
なので、一つの正規表現で解決させたいです。。
0058Name_Not_Found
02/12/09 17:48ID:???なるほど。でしたら、
^(?:\d+(?:\.\d+)?)?$
で。
.0123 とかを許可するんだったら
^(?:\d+)?(?:\.\d+)?$
で。
006036
02/12/09 18:50ID:???>>37,42,45
ありがとうございました、無事変換できました。
つまり、?が要らなかったんですね。
<code>あああ</code>ほげ<code>ほげ</code>ふがふが</code>
つまり、最初と最後の<code></code>のみを変換して、
間に入っているタグは無効にしたかったんです。
かなり悩んでいたので、助かりました。感謝です!
0061nobodyさん
02/12/09 23:44ID:???0063nobodyさん
02/12/10 06:27ID:QO7zNhpw何に対してマッチしたかがわかりません。
例えば
if($ref=~ /ああ/ || $ref=~ /いい/ || $ref=~ /うう/ || $ref=~ /ええ/){
$ref=さっきマッチした語句 , "おお";
}
みたいな処理をする場合、さっきマッチした語句を調べるにはどうしたらいいのでしょうか?
$_ とか$1を当てはめても上手くいかないんですが。
お願いします。
006463
02/12/10 06:34ID:???0065nobodyさん
02/12/10 07:37ID:???みたいなフォーマットの文を
この例では「2ちゃんねる」に当たる部分だけ抜き出したいので
$text=2ちゃんねる&hc=0&hs=0;
$text =~ /format(.*)\&(.*)/:
$hensu=$1;
みたいに書くと、$hensuの中身が
「2ちゃんねる&hc=0」という風に
一番最後にある「&」で区切られてしまいます。
最初に出くわした「&」で区切りたい、という時にはどうしたらいいんでしょうか?
0066nobodyさん
02/12/10 07:51ID:???[→[
]→]
と言う風に置き換えをしたいのですが、下記のようにすると
$msg =~ s/\Q[\E/?/g;
$msg =~ s/\Q]\E/?/g;
ー の文字コードが81 5Bで、 [ の文字コードが5Bなので
ー が文字化けをしてしまいます。
文字コードはShift_JISです。どういう風にすれば文字化けを回避できるでしょうか?
0067Name_Not_Found
02/12/10 10:17ID:SHy7dsCG.* とか .+ は最も長くマッチしようとします。
.*& ってやると後ろの & まで見ちゃうわけですね。
そういう場合は .*? みたいに、後ろに ? を付けると
なるべく短かくマッチしようとするようになります。
>>66
前の文字が Shift JIS の 1byte目じゃなければ置換、ってすればいいのかな。
s/(?:(?:^|[^1byte目の範囲を書いてね])\[)/?/g;
試してないからわからないけど、これでどうでしょう?
0068Name_Not_Found
02/12/10 10:18ID:???括弧余計すぎた。
そと側の (?: .. ) はいらないわな…
0070Name_Not_Found
02/12/10 11:42ID:SHy7dsCGただ、.*? は遅くなることがあるから、
この場合は [^&]*& の方が望ましいです。
0071nobodyさん
02/12/10 12:21ID:???速いのってどんなやつ?
kentでは
$test =~ s/([^=^\"]|^)(https?\:[\w\.\~\-\/\?\&\=\@\;\#\:\%]+)/$1<a href=\"$2\" target=\"_top\">$2<\/a>/g;
ってやってるみたいだけど これ遅くない?
007472
02/12/10 12:44ID:???それを削ってこんな感じ。
$test =~ s/(https?\:\/\/[a-zA-Z\.\~\-\/\?\&\=\@\;\#\:\%_!*'()]+)/<a href=\"$1\">$1<\/a>/g;
ちなみに、[]内はURI使える文字だけど、kentのは不足している。
動作確認していないので、フォローよろしく。
007572
02/12/10 12:59ID:???$test =~ s/(https?\:\/\/[-a-zA-Z0-9.~\/?&=\@;#:%_!*'()+\$,]+)/<a href=\"$1\">$1<\/a>/g;
0076nobodyさん
02/12/10 14:39ID:???ではダメ?
007776
02/12/10 14:41ID:???007876
02/12/10 14:44ID:???かな?
007976
02/12/10 14:45ID:???だ・・・鬱
0084nobodyさん
02/12/10 16:45ID:???0085Name_Not_Found
02/12/10 17:02ID:???それよか、IRIなんてのがひかえてますよ。
008666
02/12/10 22:19ID:???ありがとうございます。1バイト目の文字は
\x81-\x9F\xE0-\xFC
ですが、その通りにしてもなぜか>が消えてしまうようです???
例えば<BR>の次に[が来ていると、
<br? こうなってしまいます。
もしかして、s/(?:^|[^1byte目の範囲を書いてね])\[/?/g;
この場合、Shift_JISの1バイト目の文字以外が来たら、
その文字と[を?の文字に変換してしまうのではないでしょうか?
見当違いならすみません・・・
0087nobodyさん
02/12/10 22:27ID:???これだと、上手くいったような気がします。
>>67さん、ありがとうございました!
008866
02/12/10 22:29ID:???0089nobodyさん
02/12/10 23:02ID:???$hogeが'bookmark'だとちゃんと弾くけどcacheが入ってる場合に弾いてくれない。
http://www.din.or.jp/~ohzaki/regex.htm#Without
ここのやつの意味を勘違いしてるのかなぁ。
0090nobodyさん
02/12/10 23:22ID:???0092Name_Not_Found
02/12/11 01:43ID:61zg/eqGああああ、ごめんなさい。
たしかに、1byte目が消えちゃいますね。
()で$1に保存するか、look-behind 正規表現を使えばいいのかな。
(?=...)の look-ahead はそういうケースでは駄目なはず。
$1 の方は、
s/(^|[^範囲])\]/$1[/g
でいいはず。
look-behind は
s/(?<![範囲])\]/$1'amp;#91;/g
かな。こっちは Perl のバージョンが古いと使えない。5.6 あたりなら大丈夫。
0094
02/12/11 17:44ID:YVHUV6QH>>94という具合に
ページ内にリンク先がある場合に限ってリンクを張りたいのですが
どうしたらいいでしょうか。
【悪い例】
$foo=">>1 hogehoge\n>>2 hogehoge\n"; #置換対象文字列
$num="94"; #最新レスの番号
$max="100" ; #1ページあたりの表示件数
if(($num>$2)&&($2>$num-$max)){
$foo =~ s/(>>)([1-9][0-9]*)/<a href="#$2">$1$2<\/a>/g;
}
置換以前の$2では当然うまくいきませんです。
しかも、置換対象が2つ以上ある場合はどうしたらいいのでしょうか。
009594
02/12/11 17:49ID:YVHUV6QHでございます。
0096Name_Not_Found
02/12/11 18:06ID:7uJNDqfwmy $max =100; # これは range で
my $num =94; # こっちが max の方がいいような気もするけど。
my $foo=<<EOB;
>>1 hogehoge
>>2 hogehoge
EOB
my ( $high, $low ) =( $num, $num - $max );
$foo =~s/(?:>>)(\d+)/
$low <= $value and $value <= $high ? qq(<a href="#$1">>>$1</a>)
: qq(>>$1) /sge;
009796
02/12/11 18:08ID:???$value ってなんじゃ…
$1 ね。
009894
02/12/11 18:11ID:YVHUV6QH009994
02/12/11 18:49ID:YVHUV6QH恐れながら、$1は、>>にマッチするのではないですか?
すみません教えてください。
010096
02/12/11 20:29ID:7uJNDqfw(?:..) は $1..9 に値を保存しません。
なので $1 で問題ないです。
動かなかった理由は / がクォートされてなかったのと
置換文字列を一行に纒めなてかったからのようでした。
なので、s/// の替りに s{}{} を使っときます。
my $max =100; # これは range で
my $num =94; # こっちが max の方がいいような気もするけど。
my $foo=<<EOB;
>>1 hogehoge
>>2 hogehoge
EOB
my ( $high, $low ) =( $num, $num - $max );
$foo =~s{(?:>>)(\d+)}{
$low <= $1 and $1 <= $high ? qq(<a href="#$1">>>$1</a>)
: qq(>>$1) }sge;
010196
02/12/11 20:31ID:7uJNDqfw意味無いんで外しといてください。
010294
02/12/12 00:14ID:pDUwoT6Y0103nobodyさん
02/12/24 22:43ID:???0104名無しさん
03/01/03 00:29ID:yu7P73hS最短マッチが、いろいろ読んだけどわかりません。phpです。
/* hoge */ hogehoge /* hoge */ の /* */
で囲んだ部分だけ灰色にしたいんです。
ereg_replace("(/\*.+\*/)","<font color=\"gray\">\\1</font>");
こうすると 最初と最後の/* */にマッチしてしまいます。
たぶん、最長マッチだからです。
最短マッチにするには?をつけろと書いてあるけど、どこにつけるかわかりません。
(/\*.+\*/){1,}? こうするとなにも出てきません。
なんか基本的なことがわかってないです。
0105nobodyさん
03/01/03 00:46ID:nupLg+Ov0106104
03/01/03 01:09ID:yu7P73hS0107104
03/01/03 01:23ID:yu7P73hS教えてください・・・
0108nobodyさん
03/01/03 01:27ID:nupLg+Ovもしかしたらereg()で最短一致は使えないのかも。
preg_replaceでなら上手くいくかも。
0109104
03/01/03 01:40ID:yu7P73hSでもpregでもできません・・(;_;)
というか、なにも表示されないというのがアヤシイです。。
0110nobodyさん
03/01/03 01:41ID:???0111nobodyさん
03/01/03 17:38ID:???このように書いてもソが脳内通りに取得出来ないんですが
どうすればいいんでしょうか?
0112nobodyさん
03/01/03 21:33ID:nupLg+Ov0114山崎渉
03/01/15 13:36ID:???0115nobodyさん
03/01/18 13:42ID:???URLの抽出前に<>"を文字参照に置き換えると、
URLの抽出を行うと、http://www.yahoo.co.jp">Yahoo</a>
とかもa>までURL扱いになってしまい、困っています。
$msg=~s/(http|ftp|mailto)\:([\w.\@~\/\-\?&=;%#]+)/\<a href=\"$1:$2\">$1:$2<\/a>/g;
URL抽出部分はこんな感じです。
0116nobodyさん
03/01/18 13:45ID:hA2YqZMs0118115
03/01/18 18:54ID:???>じゃあ、抽出後に<>を置き換える。
抽出後に<>を置き換えると、
<aまで<aに置き換わってしまうので・・・
>まとめて括弧でくくれば
そうですね。
で、一旦[link]http://www.yahoo.co.jp[/link]に置き換えてから、
<>を置き換えて、[link]...[/link]を置き換えるというもの考えたんですが、
それだと
=~/\[link\](.*)\[\/link\]/\<a href=\"$1\">$1\<\/a\>/g;
等としても、最初の[link]から最後の[/link]までが置き換わってしまって、
2つlinkが続く場合等に予期しない結果になってしまいます。
0120115
03/01/18 19:23ID:hA2YqZMs表示時にタグ付けすると解決する?
0122115
03/01/18 19:33ID:???<a href="http://www.yahoo.co.jp/&quot;>Yahoo</>
とかになるわけで・・・
0123nobodyさん
03/01/18 19:38ID:???なんでやねん。
データ:
http://www.2ch.netって死ぬほどおもしれー!
表示:
<a href="http://www.2ch.net">http://www.2ch.net</a>って死ぬほどおもしれー!
0124115
03/01/18 19:47ID:???<a href="http://www.yahoo.co.jp/">Yahoo!</a>
と投稿した場合。
char str[]="http://www.yahoo.co.jp/";
等でも同じ。(この場合はco.jpの後の"もリンク扱いされてしまう)
0127nobodyさん
03/01/20 08:07ID:vz/F/uwh一番エレガントな書き方ってどういうのですか?あと
$url = 'http://www.2ch.net/';
$url =~ s/2ch/1ch/;
と書いた場合になんで$url のなかの"/"をエスケープしなくても
エラーにならないんでしょうか?
0129nobodyさん
03/01/20 08:09ID:???http\/\/:(www\.)?2ch\.net\/
0131nobodyさん
03/01/20 19:22ID:gSzazTgePerlだと、こう書く。
m#^http//:(?:www\.)?2ch\.net/$#
完全一致だよね。知らないけど。
あと、DNSは大文字小文字を区別しないから、この書き方は間違ってる。
今の場合は、単に正規表現を聞いてるんだから、/をエスケープする必要は無いし、
それに、Perlで使うときも、いちいち/をエスケープするのは、エレガントじゃない。
0132nobodyさん
03/01/20 20:43ID:vz/F/uwhでも、なんで
s/http://www\.2ch\.net/http://www\.1ch\.net/;
がエラーで
$url = 'http://www\.2ch\.net/';
$b = 'http://www\.1ch\.net/';
$url =~ s/$url/$b/;
がokなんでしょうか?
そのへんの理屈がよく分かりません
0133nobodyさん
03/01/20 21:52ID:gSzazTgeから、インタプリタはs/ / /を認識できる。
0134nobodyさん
03/01/20 22:08ID:???s///による置換を行う前に、s///の構文チェックをしているからでしょう多分きっと。
s/http://www\.2ch\.net/http://www\.1ch\.net/;
sの次に/があるので/を区切りとした構文としてチェックしてみる。
3つ目の/以降はスイッチ部。
wwwというスイッチは存在しないので、エラー出力
(Bareword found where operator expected, near "s/http://www")
s/$url/$b/;
構文としてはs///という形になるのでOKなので、
次に、正規表現の文字列となる$urlを正規表現のスタック?に展開して積み込み、
同じく$bを展開部用のスタックに積み込んでいるのではなかろうか。
あくまでも想像。
0135nobodyさん
03/01/22 11:39ID:Lm4zDQtU/(^.*key.*$)/$1/
じゃダメポ。
というのも、とあるテキスト書換えソフトでgrep出来たらいいなと。
0137nobodyさん
03/01/22 11:44ID:???foreach(@hoge)
{
if(/^.*key.*$/)
{
push(@a,$_);
}
}
で、良いじゃん。正規表現が合ってるかはは知らんけれど
0138nobodyさん
03/01/22 12:04ID:Lm4zDQtUgrepが使えたらこんな事はしないかと。
>>137
if等は使えないんですよ。
つまりエディタの検索、置換えに指定する事でgrepするようなものです。
0140nobodyさん
03/01/22 14:10ID:Lm4zDQtU例えですけど、メモ帳の置換えでif使えますか?
マクロじゃないですので使えないです。
0144nobodyさん
03/01/22 15:59ID:???0145nobodyさん
03/01/22 16:47ID:Lm4zDQtU何か大きく勘違いなされてるようで。
とにかく、1行(s/find/rep/)の構文だけでgrepと同じ事を出来ないかと言う事です。
スクリプトを組めるなら最初からそうしますが
制約上そのような事ができません。
0147nobodyさん
03/01/22 17:30ID:Lm4zDQtUどういう事でしょうか?
0148nobodyさん
03/01/22 17:36ID:???はじめから落ち着いて、
・一体どんなアプリケーションを作っているのか。
・一体そのアプリケーションのどの処理で悩んでいるのか。
・ifが使えない制限とは?
位は書いてくれい。
0149nobodyさん
03/01/22 17:56ID:Lm4zDQtU・使ってるソフト。
よくあるファイル一括書換えソフト。
・やりたい事
メモ帳の置換え(CTRL+H)のような感じで
検索する文字と置換えする文字を指定する事で
ファイルの内容を一気に高速で書き換えられる。
検索文字列及び置換え文字列はBREGEXP.DLLを使う事で
Perlと同等の置換えが指定できる。
その検索文字列と置換え文字列の指定方法。
・IFが使えない理由。
メモ帳のように検索文字と置換え文字を指定する事しか出来ない為。
ソフトを作ってる訳ではなく使っているだけ。
です。以上で分かって頂けるでしょうか?
0151nobodyさん
03/01/22 18:06ID:Lm4zDQtU何故無理と言い切れるのでしょうか?
0152nobodyさん
03/01/22 18:18ID:???0153nobodyさん
03/01/22 22:05ID:NkPjRdCp正規表現は、置換にも使えると聞き、検索っていうとこで、正規表現をオンにして、
自慢のコードをつっこんでみたが、ちゃんと動かないので、調べるのは面倒だから、
2chに書き込んでみた。でどうだ。
で、さらに、正規表現∈Perlだと思っている。と。
キボンヌって言えば仲間になるから大丈夫だと思っていたら大間違いだぞ。
0158nobodyさん
03/01/28 00:31ID:2+2ZA9Prif($ENV{'REMOTE_HOST'}=~/crawl[\d]+\.googlebot\.com/){⊥}
でいいのけ?
0159nobodyさん
03/01/28 00:52ID:???$robots = "crawl4.googlebot.com";
if($robots =~ /crawl[\d]+\.googlebot\.com/ ){ print "kita----!!";}
をローカル環境でテストしてみる。
0160nobodyさん
03/01/28 16:58ID:Go6r3Mozそれから、後方一致で調べればいい。
↓普通はこう。googlebotドメインだったらいいんでしょ?
$ENV{REMOTE_HOST} =~ /\.googlebot\.com$/i
↓\dを使うなら、こう使う。\d = [0-9]なので
$ENV{REMOTE_HOST} =~ /crawl\d+\.googlebot\.com$/i
0161nobodyさん
03/01/29 11:03ID:aizQjUQ4$salt =~ s/[^\.-z]/\./go;
の [^\.-z] これって、具体的にはどれを表すんですか?
0162nobodyさん
03/01/29 13:00ID:w0j+LU9j./0123456789:;<=>?@
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
↑以外
0165nobodyさん
03/01/29 21:40ID:aizQjUQ4ありがとん。
0166nobodyさん
03/01/29 21:45ID:Jsuq0iRwで、$word に「エロ」を入れてやると、「トロ」という言葉にもマッチするんですが、
何故でしょうか?
0167nobodyさん
03/01/29 22:08ID:???最後の i のせい。
「エ」の2バイト目は "G"
「ト」の2バイト目は "g"
i をつけると大文字小文字を区別しなくなるので、この2つがマッチする。。
0168nobodyさん
03/01/29 22:11ID:???http://www.din.or.jp/~ohzaki/perl.htm#JP_Match
ここを読んでおけ
0169nobodyさん
03/01/29 23:18ID:???( ´_ゝ`)フーン
能無し君がまだ初心者相手に威張る為ここに居たんですか。
まぁ分からない事聞かれて逆切れしてるような貴方にはここがお似合いですね。
( ´,_ゝ`)プッ
0171質問者
03/02/02 12:33ID:aPQL5QO2一回の検索で、マッチした文字列がどの条件にあたるかを知ることが出来る?
たとえば
対象文字列: abcdefg
検索語彙: (ab)|(fg)
こういうとき、"ab"と"fg"がマッチするということはわかるが
マッチした文字列がそれぞれどの条件だったのかを知りたい。
BREGEXP(Perl5)もしくはVBRegularExpressionで。
一回の検索では無理?
0173質問者
03/02/02 12:39ID:aPQL5QO2実はプログラム技術板から来た。
正規表現スレがあるのはこの板だけっぽい。
マッチ文字列を取得することは可能なのだが、
何にマッチしたのかを確かめるためにはどうすれば‥‥?
0174nobodyさん
03/02/02 12:42ID:???つぅか誘導したのはこの俺だ。
マッチさせたい文字列は自明(自分で設定したんだからな)なのだから後はifとeqで比較すればどうだ?
0175質問者
03/02/02 17:45ID:aPQL5QO2そか、どうも。
マッチした文字列を検索文字列と比較するということ?
>>171で書いた例についていえばそのとおりだが
正規表現でマッチさせたものについて知りたいので
単純にifで比較してもしょーがない。
(検索文字列が"a."などのとき、比較してもしょうがない)
かといって正規表現でテストするってのも二度手間だし。
正規表現でうまく書けば出来るとか、
普通そーゆー機能あるよ、とかいうことはないですかー?
0176nobodyさん
03/02/02 17:47ID:???$x =~ /(ab)|(cd)/;
if($1 eq "ab")
{
print("ab");
}
0177nobodyさん
03/02/02 17:56ID:???なるべく別々に処理を行うようにするけど。
VBとかの機能はマ板で訊いてください。
0179質問者
03/02/02 18:20ID:???ありがと。
もしかして知らないところで世の中便利になってて
一撃で出来るかなーと思ったのですが。
とりあえずあきらめときます。
0182nobodyさん
03/02/14 01:16ID:???0183nobodyさん
03/02/17 07:11ID:tFA1sH7Sという文字列を split して
[ 'hoge', 'piyo', 'foo\/bar', baka ]
という配列を得たいのですが、/ で split するけど \/ では split しない
ってのはどう表せますか?
0184nobodyさん
03/02/17 08:04ID:???0185nobodyさん
03/02/17 10:03ID:???バックスラッシュを一般化して使いたい場合を考えると split するより
my $path ='/hoge/piyo/foo\\/bar/baka/';
my @nodes;
foreach my $elem ( $path =~m%(?:^|\G/)((?:\\.|[^/])+)%g ){
$elem =~s/\\(.)/$1/g; # バックスラッシュを取り除く場合。
push( @nodes, $elem );
}
みたいなのの方がいいと思う。
これだと
/hoge/piyo/foo\/bar\\/baka/ => ['hoge','piyo','foo/bar\','baka']
みたいなのにも対応出来るし。
s///g 使って無理矢理1ステートメントにするのもアリか。
0186183
03/02/17 11:44ID:???0187nobodyたん
03/02/18 01:11ID:???@hoge = split m[(?<!\\)/], $path;
0188nobodyさん
03/02/18 18:45ID:???while ($value =~ /(<strong>.*?)<\/p><p>(.*?<\/strong>)/)
{
$value =~ s/(<strong>.*?)<\/p><p>(.*?<\/strong>)/\1\2/g;
}
※ $value に HTML が入っている。
初めはこれでも問題なかったんですけど、例えば、
$value = "<p><strong>あ</strong></p><p><strong>い</strong></p><p><strong>う</strong>";
のとき、置換後の $value は、
$value = "<p><strong>あ</strong><strong>い</strong><strong>う</strong>";
となってしまいます。この書き方で大丈夫だと思っていたのに、どうなってるんでしょうか・・・
0189nobodyさん
03/02/18 18:57ID:???<strong>.*?</p><p>.*?</strong> だと、
<strong> => <strong>
あ</strong> => .*?
</p><p> => </p><p>
<strong>い => .*?
</strong> => </strong>
ってマッチしちゃうよ。
$value =~s{<strong>(.*?)</strong>}{
my $tmp =$1;
$tmp =~s|</p><p>||g;
"<strong>$tmp</strong>";
}ge;
とか。もっと良いやり方ありそうだけど。
0190188
03/02/18 19:13ID:???あまりの睡魔に襲われて、今 コタツで寝ながら考えていたのですが、私の書き方だと strong 要素内に </p><p> がない場合を考えてないわけですよね。
本当に申し訳ございません・・・
>>189
有り難うございます。
教えて頂いた方法ですが、あとで勉強しながら考えてみます。
どうも私ではすぐには理解できそうにないもので。
とにかく有り難うございました。
0191nobodyさん
03/02/18 20:27ID:???0192nobodyさん
03/02/18 23:46ID:oZOSGD0m正規表現を勉強し始めた理由は、以下の質問からです。
192.168.1.8が、192.168.1.0/24 のネットワークアドレスに含まれているかどうかを
判定する正規表現を書くことは可能でしょうか。
よろしくおながいします。
0193nobodyさん
03/02/18 23:48ID:???0194nobodyさん
03/02/18 23:50ID:???ならtrueなのは自明だけど。
0195192
03/02/19 00:13ID:bka3cebnありがとうございます。やっぱし、正規表現よりは普通にプログラムで
やったほうが良いですか、、ちなにみJava使いです。んー、書いたことないので
なやみます。
0197nobodyさん
03/02/19 00:59ID:???0198nobodyさん
03/02/19 01:00ID:???0199nobodyさん
03/02/19 01:21ID:???0200192
03/02/19 02:16ID:bka3cebnええ、あれ、なんか、無視しちゃうような悪いことしちゃいましたか?
すいません、何かサンプル教えて下さるとうれしいす。。。
0201nobodyさん
03/02/19 02:23ID:???0202nobodyさん
03/02/19 16:59ID:oL6d+rQlという文字列があり、
name = 'hoge's name'の、内側の'だけをエスケープして置換えたいのです。
つまり
select * from testtable where name = 'hoge\'s name';
としたいのです。
ただし外側の'は必要ですのでエスケープしたくないのです。
込み入った例を書くと文字列が
name = ''''' and value = '''' の場合は、
name = '\'\'\'' and value = '\'\''
にしたいのですが、このような複雑な処理を正規表現で行うのは無理なのでしょうか?
0204nobodyさん
03/02/19 17:45ID:???> 込み入った例を書くと文字列が
> name = ''''' and value = '''' の場合は、
最大マッチでも難しそう・・・
0205nobodyさん
03/02/19 18:15ID:???SQL だと 文字リテラルのでてくる場所たくさんあるから
個数限定ってわけにもいかないし。
対になってるわけでもないし。
'' ' ' '' ' ' ' '
こんな文字列からクオートすべきのを見つけろ、ってのとかわらんもん。
どういう案件かはわかんないけど、
SQL に置き換える段階でクオートしなかったのが敗因ですね…
0206nobodyさん
03/02/21 12:55ID:6n4aSTAx了解です。
楽しようとせずSQL文を完成する前に
ひとつずつ置換えるようにします。
どうもでした。
0208nobodyさん
03/02/21 15:37ID:???0209nobodyさん
03/02/21 22:45ID:Kv1GvIlPそのなかに | があっても大丈夫ですか?
/(2ch\.net|1ch\.(com|org))/
みたいな・・
0211nobodyさん
03/02/21 23:19ID:???えっと・・あとどれをエスケープするんでしょうか?
この場合合致させたいのは
2ch.net
1ch.com
1ch.org
です
0213nobodyさん
03/02/22 10:01ID:???0214nobodyさん
03/02/22 10:12ID:???聞いた方がはやいやーってなっちゃうだろうね。
0216初心者質問者
03/02/22 17:49ID:Db6aP06Cダブルクォーテーション内部だけをマッチさせたいんですけど。
$1使わないと無理?
0219nobodyさん
03/02/24 12:33ID:fQYme6i5ある文字列から始まらない任意の文字列、というのは
どうなって書けばいいんでしょうか。
例えば、<a href...>以外のタグを見つけるといった場合ですが、
文字列a hrefから始まらない、という事で
/<[^(a href)][^>]*>/
という感じかと思ったんですが、これではダメなようなので・・・。
0221nobodyさん
03/02/24 18:51ID:???0222nobodyさん
03/02/24 22:21ID:???/<(?!a href).+?>/
0223nobodyさん
03/03/03 16:51ID:PjU+W5oKなんか「知らんヤツ書くな!!」とかで正しいのかどうか解りません。。
どなたかご教授お願いします。
言語:Perl 掲示板CGIを作っています。
やりたいこと:特定のタグ以外は無効にする。
私が考えた処理は・・・指定したタグの中身に合致しなかったら消す。
@yukotag = "('b'.'/b'.'u'.'/u')";
if ($value ne "<@yukotag>") {
$value =~ s/<(.*)>//g;
}
でもこれではそもそも動かない・・・エラーにはならないけど。
#有効になるべきタグも消えてしまいます・
どうしたらよいのでしょう。
0224223
03/03/03 16:53ID:PjU+W5oKif ($value ne "<(b|\/b)>") {
$value =~ s/<(.*)>//g;
}
0225nobodyさん
03/03/03 16:55ID:???0226nobodyさん
03/03/03 17:27ID:???Perlを基礎から勉強してください。
基本的な考え方は>>225の通り。こんな感じで。
@yukotag = ('a','u');
$value =~ s/<(\/?.*?)>/<$1>/g;
map { $value =~ s/<(\/?$_.*?)>/<$1>/ig } @yukotag;
0227nobodyさん
03/03/05 12:28ID:vWidvRyz$_=~/\n{2,}/g
ではだめれすか?
0229nobodyさん
03/03/05 12:33ID:???$_ =~ /${kaigyou}{2,}/$nanika/g
0230227
03/03/05 12:37ID:???0232230
03/03/05 22:23ID:???if($a=~/\n{2,}/gs){print"OK!\n";}
?????????????????????????????
0234nobodyさん
03/03/05 23:36ID:???おいおい、「改行ニ回」ってそういう意味かよ。
上の回答者はみんな、あんたが「ふたつ(以上)連続する改行」に
マッチさせたがってると思ったんだよ、あんたの質問と例を読んで。
$a = "aaa\nddd\nfff\n";
if(($a =~ s/\n/\n/gs) >= 2) { print "OK!\n"; }
0235230
03/03/06 03:31ID:???激しく反省
0236nobodyさん
03/03/06 03:53ID:???((a.b)(c.d)(e(f(g.hij)))k) -> マッチ
((bcd))) -> だめ。
0238サチ
03/03/08 13:12ID:dLehQyhymy $count = 0;
foreach (@data) {
$count += $com =~/\Q$_\E/;
……
この ~/\Q$_\E/ ってどういう意味なのでしょうか?
厨房的な質問ですみません。
0240nobodyさん
03/03/08 13:20ID:???それは正規表現というよりPerlの作法。
\Q =英数字以外の文字の前に\を挿入する。
\E =\L,\U,\Qなどの終了
print "\Q$_\E";
とかで効果を見たほうが早いかも。
0241サチ
03/03/08 13:32ID:dLehQyhy本当にありがとうございます。
Perlの作法なのですか。
てっきり正規表現かと思ってました。(^_^;
どこかに参考となるURLありますか?
0244サチ
03/03/08 13:37ID:dLehQyhy思いまして… ごめんなさい。
0246サチ
03/03/08 13:54ID:???ありがとうございました。m(_ _)m
0247nobodyさん
03/03/08 14:56ID:???まあ、がんばれよ。
0249nobodyさん
03/03/08 15:13ID:???デスクトップリファレンスで良いかと。
0250nobodyさん
03/03/08 16:20ID:???同じオライリーなら詳説正規表現もお勧めだよ。
0251サチ
03/03/08 18:13ID:???お金がないので諦めました。
詳説正規表現ですか。。φ(..)
0252nobodyさん
03/03/08 20:14ID:???本当に本1冊書けるし、実際に本が出てるんだよね。
それぐらい奥深いものなのかと。
0253nobodyさん
03/03/08 20:38ID:???他にも赤い表紙の奴とか、オライリー以外にも2、3冊ぐらい
正規表現の本を見かけたことがある。
0254177
03/03/08 20:46ID:???0255254
03/03/08 20:47ID:???0256nobodyさん
03/03/08 21:07ID:???あれ勉強してからチューンしたら性能が4割は上った。
はじめは馬鹿にしてたんだけどね。
0257nobodyさん
03/03/08 21:53ID:???正規表現はスクリプトの実行速度に影響を与えていることが
結構あったりしますので、コードチューニングには、いい本です。
しかし、入門には少々マニアックすぎるかも。
# 毒食えば皿までかな。
0258nobodyさん
03/03/09 00:39ID:???Perl5.6以降では(??{})でいけたような。
もはや「正規表現」とは言えないわけだがだいぶ前から
Perlの正規表現は厳密な意味で正規表現じゃないし
0260nobodyさん
03/03/09 12:49ID:9EZ5B9RAaもしくはdという文字列が含まれているかという判定を正規表現で書きたいのですが…
超初心者ですんません。
0262260
03/03/09 16:47ID:???0263nobodyさん
03/03/11 10:43ID:V1nwV3pf0と1からなる列で0は偶数回、1は奇数回現れるもの全て。」
わからない…。ていうか可能?
0267名無しさん@Meadow
03/03/11 11:16ID:wliWOweuPerlだしゅ。正規表現じゃないな。
while(<>) {
@zero=m/0/g;
@ichi=m/1/g;
if ($#zero % 2 != 0 and $#ichi % 2 == 0) {
print;
}
}
0269nobodyさん
03/03/11 11:45ID:???どういうこと?原文ままだと
*3.7 次の言語に対する正規表現を書きなさい.
a) 5個の母音a,e,i,o,uがこの順序でどこかに現れる英字列すべて
b) 辞書式順序の関係に従って現れる英字列すべて
(略)
f) 0と1からなる列で,0は偶数回,1は奇数回,現れるものすべて
(以下続く)
「コンパイラI 原理・技法・ツール」(通称ドラゴンブック)ていうやつの練習問題。
0272nobodyさん
03/03/11 16:10ID:???オライリージャパンの「正規表現」って本読んだ。
ちょっと古めなのであれだったけど。
(\4000)
書いてある内容はあれだったけど、
説明のしかたがクソだった。
よくオライリーからあんなクソ説明本が出たもんだ。
読んでる途中で嫌になってくる。
0274nobodyさん
03/03/11 19:10ID:???いや、ただ気になったので。この類の本って問題だけで答えがないってのが
多い気がする。
>>271
「言語」はあるアルファベット(文字集合)からなるものの列をいうっていうようなことが
書いてあるので、たぶんここでは文字列っていうのと同じとみていいと思う。
「言語 受理」で検索するとそれっぽいページが多くヒットするので分野によっては
普通の表現なのかも(「受理」はまぁつまり「マッチが成功する」って言う意味)。
0275nobodyさん
03/03/11 23:48ID:???0278nobodyさん
03/03/12 22:04ID:hmpHRxfR0279nobodyさん
03/03/12 22:31ID:wNWBQmqkたぶんあなたのレベルの問題だと思うぞ。
あと2,3回我慢して読んでみなよ。
0280nobodyさん
03/03/12 22:38ID:???と
.+?
の違いって何ですか??
0281あぼーん
NGNG0285nobodyさん
03/03/13 15:28ID:???(x?) って (|x) の略記法だと思ったんだけど。
だから空にもマッチするんじゃないの?
0286nobodyさん
03/03/13 15:44ID:???その"?"と、>>280の"?"では意味が違います。
>>280の"?"は量指定子(この場合は"+")の後ろにありますので、
これは「最短のマッチを選べ」という指示になります。
結果として、".+?"は「何か一文字」にマッチするということになりますね。
0287山崎渉
03/03/13 16:58ID:???0290nobodyさん
03/03/14 00:04ID:???0291nobodyさん
03/03/14 00:04ID:???0292nobodyさん
03/03/14 00:04ID:???0293nobodyさん
03/03/14 00:05ID:s293/lDl0294nobodyさん
03/03/14 00:23ID:???* +の後ろにくっつけた?は意味が違う。
だから、*? +?で1つのメタ文字として考える方が正しいといえる。
0300nobodyさん
03/03/20 21:24ID:8BKMA1mqちがうよ(ぷ
0301nobodyさん
03/03/21 01:13ID:???0302nobodyさん
03/03/26 17:02ID:4WzRK9Seそのままにしておきたいような場合はどのように表記すればいいんでしょうか?
s{[^(?:&|<|>|")];}{}g とか
s{[^&|<|>|"];}{}g とかやってみましたがうまくいかず。
どなたか助けてください。
0303302
03/03/26 17:16ID:4WzRK9Se文字列の中で、「;」を消したいんだけど「<」や「>」の「;」は
そのままにしておきたいような場合はどのように表記すればいいんでしょうか?
s{[^(?:&|<|>|")];}{}g とか
s{[^&|<|>|"];}{}g とかやってみましたがうまくいかず。
どなたか助けてください。
0305nobodyさん
03/03/26 19:42ID:???0306nobodyさん
03/03/27 01:45ID:lpoVliEYif($FORM{'pass'} =~ /[0-9]pass/)
わかると思いますが、これは$FORM{'pass'}が[0-9]passだったら○○する、という命令なんですけど、
この0から9を0から24にしたいんです。
if($FORM{'pass'} =~ /[0-24]pass/)
これじゃあ0から2と認識されてしまいました。
どうかご教授お願いします。。
0307nobodyさん
03/03/27 02:14ID:DK9B1aQJif($FORM{'pass'} =~ /(1?[0-9]|2[0-4])pass/)
でいいんじゃないかなあ。
0308nobodyさん
03/03/27 02:20ID:DK9B1aQJif($FORM{'pass'} =~ /(\d+)pass/ && $1<24)
とかでもできるかなあ。
0309nobodyさん
03/03/28 10:31ID:q5wWnzii/.{10,}/
こう書いたのですがなんでも10回続けばマッチしてしまう(10文字以上の長さだったらマッチ)
kふぉあsdん@ごあsdんg@おあんう゛ぁ@おsなおさkんが@おsんdg@お
にマッチせず、
あいうえお!!!!!!!!!!!!!!!!
や、
あいうえおあいうえおあいうえおあいうえおあいうえおあいうえおあいうえおあいうえおあいうえおあいうえお
などにマッチさせたいんですが、どういう書き方をすればいいのでしょうか?
どうぞ、よろしくお願いします。
0310nobodyさん
03/03/28 10:45ID:???kふぉあsdん@ごあsdんg@おあんう゛ぁ@おsなおさkんが@おsんdg@お
コレだって10文字以上だろ
人間にとって意味がある文章を洗い出すって意味なら無理
0312309
03/03/29 03:39ID:WGdDwe6jなんらかの文字列がn回以上続く
↓
なんらかの文字列が連続でn回以上続く
「連続」で続いてないとだめなんです。
だから、
kふぉあsdん@ごあsdんg@おあんう゛ぁ@おsなおさkんが@おsんdg@お
は、マッチしません。
あいうえお!!!!!!!!!!!!!!!!
は、「!」が10個以上あるのでマッチします。
あいうえおあいうえおあいうえおあいうえおあいうえおあいうえおあいうえおあいうえおあいうえおあいうえお
は、「あいうえお」が10個以上あるのでマッチします。
こんな表現は無理なんでしょうか?
>>311
これでは無かったです。
単にn文字以上、ではなく、連続で続くとマッチさせたいんです。
0313nobodyさん
03/03/29 11:26ID:???if ( $str =~/(.+)\1/ ) {
print 'OK';
} else {
print 'NG';
}
0314nobodyさん
03/03/29 17:46ID:???0315nobodyさん
03/03/29 18:25ID:???/(.+)\1{N,}/
Nはn - 1で。
0316309
03/03/29 22:08ID:xi1Z4LcN一応サンプル
ttp://thebbs.jp/common/thetop/index.html
連続した文字に反応します。
このようにしたいんですけど。。。
0318309
03/03/31 00:38ID:rrn9gB8/すいません、>>315サソのでいけました!
みなさんどうもありがとう・゚・(ノД`)・゚・
0319309
03/03/31 00:50ID:???0321nobodyさん
03/03/31 18:43ID:???$ascii = '[\x00-\x7F]';
$twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]';
$threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]';
/((?:$ascii|$twoBytes|$threeBytes)+)\1{N,}/
0323Perl
03/04/04 15:20ID:????x (十六進数) {,4} ;
でない #(任意の16文字) にマッチさせるにはどうしたらよいですか。
0324名無しさん@Meadow
03/04/04 23:02ID:???わけわか
人にわかるように書け
0326nobodyさん?
03/04/05 04:37ID:bmLMbrZJ<b></b>タグで挟まれた文字列(レスの名前部分)だけ残す場合、どんな方法がありますか?
$str =~ /<b>([^<]+)<\/b>/; $str = $1;
$str =~ s/.*<b>([^<]+)<\/b>.*/$1/;
ってのはエレガントじゃないですよね
0327nobodyさん
03/04/05 04:47ID:???これじゃだめ?
0330Perl
03/04/05 10:26ID:???0331デフォルトの名無しさん
03/04/05 11:11ID:E+nPGg0Qわけのわかるように書け、といてるのがわからんかな。
(a) /#.{16}/ # '#'に続く任意の16文字じゃ
(b) /?[0-9]{2,4}/ # '?'に続く十進数2個〜4個じゃ
(c) /?(x[0-9a-z][0-9a-z]){,4}/ # '?'に続く十六進数表記0個〜4個じゃ
(a)は、(b)でも(c)でもないから、(a)がおぬしの求める解そのもの
ではないのかの。
(b)も(c)も含まぬ(a)をマッチさせたいのではないのかの。
それなら別の問い方がある。日本語をべんきょし直してこい
0332nobodyさん
03/04/05 14:40ID:7kbMg08sから最後の\n〜\nを消したいのですがどうすればいいですか?
結果的に
\nああああ 2003/6/08\n\nsdfg 2004/9/9\n
というふうにしたいのですが
0333nobodyさん
03/04/05 14:47ID:???0334nobodyさん
03/04/05 16:15ID:???join('\n',(split(/\n/,"\nああああ 2003/6/08\n\nsdfg 2004/9/9\n\nぉいこいjk\n"))[0..3])
こじつけ(w
0335332
03/04/05 17:02ID:7kbMg08s0337Perl
03/04/05 22:53ID:???> (b)も(c)も含まぬ(a)をマッチさせたい
そうです。
質問者の癖に揚げ足を取っとくと、
(C)は [0-9a-fA-F]。
「純粋な正規表現」ではできないのですか?
Perlなら下記でいけそうですが。
/(?<!&)#.{16}/
?(数字); にはマッチしなくて
?(文字); や?(;以外の任意)にはマッチ なんてできませんよね?
0338nobodyさん
03/04/05 23:36ID:???0339nobodyさん
03/04/06 00:32ID:???0340Perl
03/04/06 01:01ID:???同じpc2鯖でもweb製作は使えるのに。
テスト & &です。
&amp; &です。
&# ?です。
0341nobodyさん
03/04/09 16:59ID:???どういう正規表現使ったらいいでしょうか
http://www.din.or.jp/~ohzaki/perl.htm#Mail
を見てみたのですが、ちょっと分かりませんでした…。
言語はまだ未定なのですが、perlでできればいいなと考えてます。
0342nobodyさん
03/04/09 17:12ID:???決まった場所にメールアドレスが来てない?
0344nobodyさん
03/04/09 17:33ID:???そうですね。
OEのメッセージをテキストで保存したものですが、
----↓一行目から----
送信者: <[email protected]>
宛先: <[email protected]>
件名 : テスト
日時 : 2003年4月9日 17:33
--------------------
てな感じになってます。
ヘッダ部分は決まった場所なんですが、
本文中のメアドも消したいんです。
0346nobodyさん
03/04/10 01:00ID:+Bf7VwF40347nobodyさん
03/04/10 01:08ID:???0348nobodyさん
03/04/10 01:58ID:???メールアドレスの正規表現はググればいくらでも見つかるでしょ
どっちみち、perl5.6以前は完全には表せないけどあまり支障はないと思う
0349nobodyさん
03/04/10 03:20ID:vlrWfcuj0350あぼーん
NGNG0351あぼーん
NGNG0352あぼーん
NGNG0353nobodyさん
03/04/11 04:03ID:???もまいらオススメのMail Addressの正当性チェックパターンを是非341に押しえて
ください。
教科書的には
/^[\w\-+\.]+\@[\w\-+\.]+$/i
・・・って事になるかもしれないけど、これだとage@sageでも通ってしまいまふ。
http://www.din.or.jp/~ohzaki/perl.htm#Mailは現実的じゃないし、perl上で@で
splitして要素数数えてから左辺右辺を個別に評価した方が確実なんでしょうけど、
ここは正規表現一発って事でおながいします。
0354nobodyさん
03/04/11 04:18ID:???0356nobodyさん
03/04/11 06:29ID:???0359nobodyさん
03/04/11 13:09ID:???0360nobodyさん
03/04/11 19:44ID:???0361nobodyさん
03/04/15 07:50ID:???空白と@を除く全ての1バイト文字とは違うの?
ドメインにより制限があるが、流動的になり得るので、
ドメイン別の場合分けは無意味と思う。
(1バイト文字=A-Z,a-z,0-9,キーボードから打てる記号)
0362はしのえみ好きー
03/04/15 08:10ID:???0363nobodyさん
03/04/15 12:10ID:GI84bLWkダブルコーテーションで必ず囲みたい!
"aaa → "aaa"
aaa" → "aaa"
aaa → "aaa"
どうする?正規表現!
0364nobodyさん
03/04/15 12:18ID:VH8m0AHo0365nobodyさん
03/04/15 13:14ID:x65/25rDありがとうございます。
でも実行してみたら
"aaa → ""aaa
となってしまいました。。
0366nobodyさん
03/04/15 13:20ID:???まじで?
私は、余計なかっこがついてきたよ。
だから、こう書き直したら、直ったよ。
s/^\"?([^\"]+)\"?$/\"\1\"/;
0367nobodyさん
03/04/15 14:26ID:fimoekOyありがとうございました。
直りました。
0368nobodyさん
03/04/15 18:15ID:???それから、正規表現中の"は意味は無いからエスケープする必要は無い。
で、自分ならこう書く。
s/^"?(.*?)"?$/"$1"/
0369nobodyさん
03/04/15 18:25ID:W26JC1siどうするんだろう・・・
超バッド←「超」にマッチ
超能力←「超」にマッチ
超クール←マッチしない
/超^(クール)/ じゃダメらしい・・・
unless(/超クール/){
if /超/
以外でひとつ・・・
0370nobodyさん
03/04/15 18:29ID:???0372nobodyさん
03/04/15 18:54ID:???\n{5,} マッチしませんでした
\n\n\n\n\n マッチしませんでした
どなたかお願いします・・・。
0373あぼーん
NGNG0375nobodyさん
03/04/15 19:14ID:???0376nobodyさん
03/04/15 19:41ID:???(?! ) (?= ) とか。そういうのは断り書きしたほうが委員でないか
0377nobodyさん
03/04/15 20:09ID:???何を使ってやりたいのかをちゃんと書いたほうがいいと思う
0379nobodyさん
03/04/15 23:21ID:qSlvjohaで,具体的には不等式の左辺と右辺を取り出したい。
たとえば,
$statement = q["abc de" > 123 or abcde = "zz zz"];
だと,"abc de"とabcdeが左辺,123と"zz zz"が右辺。
これを解析するために
$operand = '(?:<=|>=|>|<|=)';
$var = '(?:\w+|"[^"]*")';
$statement =~ s/($var)\s*$operand\s*($var)/(left) $1 (right) $2/g;
print $statement;
とかすると
(left) "abc de" (right) 123 or (left) abcde (right) "zz zz"
という出力が得られる。
さて,
0380nobodyさん
03/04/15 23:22ID:qSlvjoha$statement = q["abc de" > 123 or abcde = 'zz zz'];
の場合に
(left) "abc de" (right) 123 or (left) abcde (right) 'zz zz'
としたい。
$operand = '(?:<=|>=|>|<|=)';
$var = q!(?:\w+|("|')[^\1]*\1)!; #ここを変えた
$statement = q["abc de" >123 or abcde = 'zz zz'];
$statement =~ s/($var)\s*$operand\s*($var)/(left) $1 (right) $2/g;
print $statement;
だとまったく解析が成功しない。どうして?
0381nobodyさん
03/04/15 23:27ID:???本を読んで2日目です、、、急に必要になってしまいました。おやさしいかた、おしえてください。よろしくおねがいいたします。
0382nobodyさん
03/04/15 23:35ID:qSlvjohahttp://www.din.or.jp/~ohzaki/perl.htm#JP_Fold
0383nobodyさん
03/04/15 23:37ID:???$statement =~ s{
(\w+|"[^"]+"|'[^']+')
\s*
(?:[<>]=?|=)
\s*
(\w+|"[^"]+"|'[^']+')
}
{(left) $1 (right) $2}gx;
0385nobodyさん
03/04/16 13:17ID:QKerHoGZたしかPerlメモで拾った
<!(?:--[^-]*-(?:[^-]+-)*?-(?:[^>-]*(?:-[^>-]+)*?)??)*(?:>|$(?!\n)|--.*$)
では、マッチしないケースがあるみたいです。
(ここのHTMLなど:http://messages.yahoo.co.jp/yahoo/Computers___Internet/Hardware/Mobile_Phones_/index.html)
<!(?:--(?:(?!--).)*--\s*)*>
だと大丈夫なんですが、十分なんでしょうか?
他にコメントタグの記述形式があれば知りたいです。
0386nobodyさん
03/04/17 11:44ID:326c+Ekvある文字列内に、所定の単語が含まれていない 場合を判定する正規表現を書きたいです。どういう書き方が良いですか。
[^abc] ですと、a,b,cのいずれかが含まれていない、という判定になってしまいます。そうでなく、abc という文字列が含まれていない、というのを判定したいです。
0389nobodyさん
03/04/17 13:17ID:???とか
perl,rubyあたりでしかつかえんよーな・・・
0390nobodyさん
03/04/19 15:42ID:???どのようにすればいいのでしょうか?
例えば<td>などで挟まれているhttp://www*.hoge.ne.jp/*****(*は任意の数字)だけを
抽出したいのです
0391nobodyさん
03/04/19 16:06ID:9ZhNrFm80392はしのえみ好きー
03/04/19 17:08ID:???/<[^>]+>http://www\d+.hoge.ne.jp/\d+</[^>]+>/
?
0393はしのえみ好きー
03/04/19 17:08ID:???0394はしのえみ好きー
03/04/19 17:11ID:???しかもピリオドエスケープしてなかったし(もうだめぽ(´・ω・`)
<[^>]+>http://www\d+\.hoge\.ne\.jp/\d+</[^>]+>
0395nobodyさん
03/04/19 20:00ID:???0396386
03/04/19 23:46ID:???0397山崎渉
03/04/20 05:59ID:???( ^^ )< ぬるぽ(^^)
0398nobodyさん
03/04/24 17:15ID:/44ojQ66の範囲を削除したいのですが、こんなんでいいんでしょうか。
s/<script[\s.\S]\s*(.*)\s*>[\s.\S]*<\s*\/script>//gi
0399398
03/04/24 18:29ID:/44ojQ66s/<script\s*.+?>.+?\s*<\/script>//gi
これに落ち着いた感じなんですが、どうでしょうか?
0400nobodyさん
03/04/24 18:32ID:???0401nobodyさん
03/04/24 18:33ID:???か。。
0403nobodyさん
03/04/24 23:39ID:???0404nobodyさん
03/04/24 23:40ID:???0405399
03/04/25 01:34ID:fbvwVtSF>>399の記述でも、目的は達しているように見えるのですが、
ご教示頂いたものを試してみようと思います。
現在、コメントタグの削除に取り組んでいますが、
s/<!--[^>]*-->//g
これで、一応目的は達しているように見えます。
複数行またがるコメントタグも削除できているようです。
しかし、より効果的な記述方法はあるでしょうか?
0406nobodyさん
03/04/25 04:34ID:???コメントタグは < >が含まれることがある(というかブラウザー的にはエラーにならない)
のでそれじゃ駄目
あと、改行も問題有るので
s/<!--(?:(?!-->).)*)-->//gs
ぐらいにしとかにゃだめなんじゃない
0407nobodyさん
03/04/25 05:04ID:???http://www.din.or.jp/~ohzaki/perl.htm#HTML_Tag
0408405
03/04/25 10:00ID:EpsK+/d8クスコです。試してみます。
>>407
情報源、クスコです。
Perlメモは読んでまして、そこのコメントタグも試しました。
ただ、あれでは意図しない部分まで削除してしまうケースがあるようです。
0409123
03/04/25 10:36ID:HCZY3VXf※jdk1.3は正規表現はつかえないから別のライブラリを使う(以下参照)
※jdk1.4は標準でついていたのでそれを使う(使い方忘れた、自分で探せ)
String aaa = \"123456789\";
Pattern pattern_1 = compiler.compile("456",Perl5Compiler.CASE_INSENSITIVE_MASK);
aaa = Util.substitute(matcher,pattern_1,000,aaa,Util.SUBSTITUTE_ALL);
0410405
03/04/25 12:08ID:EpsK+/d8SCRIPTタグの削除も含んでます。
http://www.faqts.com/knowledge_base/view.phtml/aid/21761/fid/597
これの下の方。
/<(?:!(?:--[\s\S]*?--\s*)*(>)\s*|(?:script|style|SCRIPT|STYLE)[\s\S]*?<\/(?:script|style|SCRIPT|STYLE)>)/g;
これ使ったら、見事にうまくいったヨカン。
0411あぼーん
NGNG0412あぼーん
NGNG0413nobodyさん
03/04/26 00:57ID:IuuTGNpAメアドの正規表現ってこんな感じでいいの(初心者でつ)?
0415nobodyさん
03/04/26 13:56ID:???[^@]+@[a-zA-Z0-9\-_]\.[a-z]{,3}
0416nobodyさん
03/04/26 19:14ID:???0418nobodyさん
03/04/26 19:28ID:???0419nobodyさん
03/04/26 20:02ID:???無かった事にしてくれ。
(でも、確かRFC的には許容内なんだよな。鬱)
0420nobodyさん
03/04/26 21:59ID:???RFCに適合するかどうかのチェックなら厳密にやらなければならないし、
実際には許されない架空のアドレス風味を表すだけなら簡単だし。
0421nobodyさん
03/04/27 01:10ID:???0422nobodyさん
03/05/07 01:48ID:U7blGvbH基本的には\が重なること以外にはPerl5と同じはずです。
これ↓を
SELECT * FROM MEMBER WHERE {NAME='[personName]' AND }AGE=[age]{ AND TEL='[tel]'} ORDER BY AGE;
こういう風に
SELECT * FROM MEMBER WHERE AGE=[age]{ AND TEL='[tel]'} ORDER BY AGE;
変換したいのですが下記ではだめなのでしょうか。
/\\{.*?\\[personName\\].*?\\}//
0424nobodyさん
03/05/07 03:09ID:???@よりもあとを正引きしてMXレコードがあるかどうか
調べるとかどう?
0425nobodyさん
03/05/07 03:11ID:???MXレコードがあるかどうかだけ調べてみるとか
DNS鯖とか落ちてたら登録拒否できるから
確認のメール送る場合とか結構有効じゃない?
0427見習い中
03/05/07 09:46ID:l7Gf5uMD今、正規表現を使って半角英数字のチェックを行っているのですが、
入力テキストエリアに半角英数字が入力されたら、エラーを出すように
したいのですが、
if ($in{'name'} !~ /[a-zA-Z0-9\-]+/ ) { &error("エラーです"); }
としたところ、半角英数字はエラーを返すのですが、
全角英字大文字(ABC)と全角数字(123)も反応してしまいます。
(ToT)...
全角英字小文字(abc)は反応しませんでした。。
半角英数字の入力のみエラーを返したいのですが、どなたか教えてください。
0428あぼーん
NGNG0429nobodyさん
03/05/07 10:52ID:???もしかしてAだけの入力ならうまく動作しませんか?
バイナリエディタを使ってABC周辺のバイトコードと
abc周辺のバイトコードを比較してみましょう。
0430427
03/05/08 12:05ID:0MiTKfYxいろんなサイトを調べてみたら、こんなのがあってやってみました。
jcode::convert(\$in{'name'}, 'euc');
if ($in{'name'} !~ /^[\xA1-\xFE][\xA1-\xFE]+$/ ) { &error("エラーです"); }
とやったら、うまくいきました。(全角文字以外はエラーを返します。)
jcode.plの力ということでしょうか。。。プログラムは奥がふかいです。。。
0432nobodyさん
03/05/10 18:06ID:/HHBMizpニュースサイトからアンカータグの部分だけを取得してくるスクリプトを
書いていたのですが、htmlソースの一行の中に複数のアンカータグがあった場合、
その全てをきれいに抽出できないのです。例えば、抽出したい元のソースが
<a href="http://aaa.com/">あああ</a>、<a href="http://iii.com/">いいい</a><br>
のようになっていたとして、正規表現でそれぞれのタグにマッチングさせようとしても何故か
『<a href="http://aaa.com/">あああ</a>、<a href="http://iii.com/">いいい</a>』か、
『<a href="http://iii.com/">いいい</a>』だけか、
『<a href="http://aaa.com/">あああ</a>』だけといったようにしか抽出できず、
純粋に
『<a href="http://aaa.com/">あああ</a>』と『<a href="http://iii.com/">いいい</a>』
の2つを取り出せないのです。
拙いながらこのようなことを散々試したのですが……。
while( $list =~ /<a\s.*href="{1}?.*"{1}?.*>{1}?.*<\/a>{1}?/g )
{
print $&;
}
どなたか、助言していただけませんでしょうか。
0433432
03/05/10 18:09ID:???0434nobodyさん
03/05/10 19:16ID:???0435nobodyさん
03/05/10 19:44ID:???マイナス25点ってとこだな。なぜマイナスかと言うと、使うと損するくらい
まともに処理できてないからな。
まア、80点以上が出たらわたしのほうから正解を書くとしよう。
0436nobodyさん
03/05/10 20:18ID:???0440nobodyさん
03/05/10 23:28ID:???HTML::LinkExtor->new(
sub {
my ($tag, %attr) = @_;
push @links, values %attr;
}
)->parse(\$list);
print "$_\n" foreach @links;
0441nobodyさん
03/05/10 23:40ID:???print "$1,$2\n" while $list =~ m#<a href="([^"]+)">([^<]*)</a>#ig;
これで妥協して。
0442nobodyさん
03/05/11 00:24ID:???0443nobodyさん
03/05/11 00:41ID:???0445センスのない432
03/05/11 07:00ID:???name="" id="" class="" target="" 等が入った場合にも対応できたので、
とりあえずこれで良しとします。ありがとうございました。>434-444
0446405
03/05/11 10:38ID:QXPmJshpm#<a.+?\s*href\s*=.+?\s*>#ig
あたりでどう?
<a name="" target="" href="http://hoge">
ってケースもある。
0448nobodyさん
03/05/11 12:33ID:???0449nobodyさん
03/05/11 14:25ID:QXPmJshpいいよ
0450nobodyさん
03/05/11 15:26ID:???read(FILE, $doc, -s FILE);
while( $doc =~ m|<a.*?/a>|isg ){
my $temp = $MATCH;
$temp =~ s/\n//g;
print $temp,"\n";
}
close FILE;
0451435
03/05/11 16:12ID:???<applet><a href="hoge">abc</a>
<address><a href="hoge">abc</a>
<area><a href="hoge">abc</a>
あらゆる可能性も考慮しないと・・・30点
0452nobodyさん
03/05/11 16:24ID:???my @tag = $_ =~ m/<a([^>]).>/g;
@uri = map{ m/($http_regx)/; $1; } @tag;
}
$http_regxは自分で調べること
0453nobodyさん
03/05/11 17:16ID:???{
my @tag = $data =~ m/<a([^>].)>/g;
@uri = map{ m/($http_regx)/; $1; } @tag;
}
0454nobodyさん
03/05/11 17:23ID:???0460435
03/05/11 18:07ID:???0461456
03/05/11 18:10ID:???その「念」てなんだよ。点数出すからには採点基準を示せよな。
parse 対象となる HTML の DTD も示せ。BNF でも構わん。
それができないのならこんなの不毛なだけだ。
0462nobodyさん
03/05/11 18:14ID:???my @list = $data =~ /<a(?:[^>]+)?>/g;
@uri = map{ $_=~ /href="?($http_regex)"?/; $1; } grep{/href="?($http_regex)"?/} @list;
0463459
03/05/11 18:17ID:???ごめん、俺は435じゃない。
ネストしないんだからアレでイイと思うんだけど、
ニュースサイトがvalidなHTMLを書いていることは少ないから
「年」って行っただけぽ。
0464435
03/05/11 18:21ID:???s/<!--.*-->//gs; # 前処理
@gets= $_=~ m!<A\s[^>]*?\bhref=.+?</A>!gsi;
どうだ、、、これで確実に「ゲッツ!」しろYO!
0466435
03/05/11 18:29ID:???>>432嫁
s/<COMMENT>.*</COMMENT>//gs;
s/<!--.*-->//gs;
@gets= m!<A\s[^>]*?\bhref\s*=.+?</A>!gsi;
こんなのがもっと堅実かもな
0467435
03/05/11 18:30ID:???s/<COMMENT>.*</COMMENT>//gsi;
0468435
03/05/11 18:36ID:???s!<COMMENT>.*</COMMENT>!!gsi;
まったくつくづくだな
0469456
03/05/11 18:44ID:???0470あぼーん
NGNG0471435
03/05/11 18:51ID:???だから、<a name="hoge"></a>
とか
<!--<a href="hoge">--><a href="hoge">abc</a>
とかも考慮すると>>456は68点だな。
採点基準は漏れの直感だ
0472nobodyさん
03/05/11 18:54ID:???s/<!--(?:(?!-->).)*-->//ig;
s/<COMMENT>(?:(?!<\/COMMENT>).)*<\/COMMENT>//gsi;
@gets = m/<a[^>]+href=[^>]*>(?:(?!<\/a>).)*<\/a>/gsi;
0474nobodyさん
03/05/11 18:58ID:???結局イチャモンつけたいだけか・・・
0475435
03/05/11 19:01ID:???<area href="url">ってタグあるの知ってる?
0476456
03/05/11 19:03ID:???お前、どっか逝け。
0477nobodyさん
03/05/11 19:03ID:???じゃ、これでいいんでは?
0479435
03/05/11 19:08ID:???それじゃ進歩しないぞ。ここは道場だからな。ビシビシいくぞ!
馴れ合いスレじゃないからな。
もちろん漏れが書いたのもまだ不完全なのかも知れん。つっこみどころが
あればつっこんでもっといいものを出せばいいんだ。
0480あぼーん
NGNG0481456
03/05/11 19:14ID:???じゃあ意味の無い点数なんて付けるな。
第一、処理対象となる HTML がどんな仕様なのか前提があいまいで、
あとからコレはダメだアレはダメだなんてのは、
単にいちゃもん付けたいだけとしか思えん。
だったら最初から parse 対象 HTML を全て提示しとけ。
0482435
03/05/11 19:21ID:???いちいち見ず知らずの漏れが付けた点数に反応してどうするよ。
おかしいと思えば無視しろよ。
HTMLの仕様は決まってるだろ。今まで書いたことがいちゃもんだといわれ
ても、漏れがやってるプログラミングの世界ではあらゆる状況を考慮しないと
とんでもないバグになってしまうから、まア職業病だと思ってくれ。
0483456
03/05/11 19:28ID:???> HTMLの仕様は決まってるだろ。
だから漏れが <a> はネストしないって言ったら、 >>457 と言う。
だったらお前の脳内HTML仕様を提示しろと言ってるんだYO!
とんだ職業病だな。
0485nobodyさん
03/05/11 19:45ID:???だから、わざと冗長な正規表現をかいただけのはなしだが・・・
^^^^^^
手前ルールでやられりゃ、腹も立つやろうなぁ・・・
0486あぼーん
NGNG0487nobodyさん
03/05/11 20:20ID:???0488名無しさん@Meadow
03/05/12 07:34ID:???486みたいな香具師は2chでは普通ですが、何か。
0490nobodyさん
03/05/12 09:37ID:???0492nobodyさん
03/05/12 10:28ID:85k2ng51ここまでやるってのはどう?
/<(?:!(?:--[\s\S]*?--\s*)*(>)\s*|(?:script|style|SCRIPT|STYLE)[\s\S]*?<\/(?:script|style|SCRIPT|STYLE)>)/isg;
0493nobodyさん
03/05/12 10:47ID:???iつけるんなら、
/<(?:!(?:--[\s\S]*?--\s*)*(>)\s*|(?:script|style)[\s\S]*?<\/(?:script|style)>)/isg;
これでいいんでない?
[\s\S] って .でいいんちゃうかな?
0494nobodyさん
03/05/12 10:53ID:85k2ng51そうだね、指摘サンクスコ(・∀・)
漏れのソース、i付いてなかった(;´Д`)
0495nobodyさん
03/05/12 10:54ID:85k2ng51ありとあらゆるサイトのコメント入りHTML食わせてみたけど、
まず間違いなく削除してくれる。
100%ではないかもしれないけど。
0496あぼーん
NGNG0497nobodyさん
03/05/12 22:56ID:???0498nobodyさん
03/05/19 22:15ID:pDSpAcPJ正規表現はどう書けばいいのでしょうか。
たとえば下のフルパスからhttpd.confだけを取り出すような場合です。
C:\Program Files\Apache Group\Apache\conf\httpd.conf
0499あぼーん
NGNG0501あぼーん
NGNG0502nobodyさん
03/05/19 22:58ID:???perlなのですがエラーになりました。
-----test.pl------
my $path = $0;
$path =~ \\([^\\+])$;
print "\$path :\n";
print "$path\n";
----------------
0504nobodyさん
03/05/19 23:23ID:???$a='C:\Program Files\Apache Group\Apache\conf\httpd.conf';
($_)=$a=~ /^.+\\(.+)$/;
print;
0505nobodyさん
03/05/19 23:26ID:???すいません。
改めて試しましたがファイル名test.pが取得できません。
-----test.pl------
my $path = $0;
print "$path\n";
$path =~ /\\([^\\+])$/;
print "\$path :\n";
print "$path\n";
----------------
0506500
03/05/19 23:33ID:???× \\([^\\+])$
○ \\([^\\]+)$
>>505
typoに関係なくそのスクリプトは間違っている。
もう一回本読め。
0507nobodyさん
03/05/19 23:42ID:???さっそく試してみました。
しかしフルパスが入ります。
環境は98です。
-----test.pl------
my $path = $0;
print "$path\n";
$path =~ /^.+\\(.+)$/;
print "\$path :\n";
print "$path\n";
----------------
>>506
ダメでした。
スクリプト自体が間違っていますか?
-----test.pl------
my $path = $0;
print "$path\n";
$path =~ /\\([^\\]+)$/;
print "\$path :\n";
print "$path\n";
----------------
0510nobodyさん
03/05/19 23:52ID:???0512nobodyさん
03/05/20 00:33ID:???500へのお礼を忘れてました。
確かに拾えます。
ですがまだ不具合があるので両方の正規表現を使って試している最中です。
-----test.pl------
my $path = $0;
print "$path\n";
($_)= $path =~ /\\([^\\]+)$/;
print "\$path1 :\n";
print "$_\n";
$a='C:\Program Files\Apache Group\Apache\conf\httpd.conf';
($_)=$a=~ /^.+\\(.+)$/;
print;
----------------
0513nobodyさん
03/05/20 00:38ID:???0514nobodyさん
03/05/20 01:10ID:???$a='C:\Program Files\Apache Group\Apache\conf\httpd.conf';
perl test.plというようにカレントディレクトリから実行して下のような値が入った場合はファイル名を取得できません。
$b='httpd.conf';
$a='C:\Program Files\Apache Group\Apache\conf\httpd.conf';
$b='httpd.conf';
両方の値からhttpd.confだけを抜け出せないでしょうか。
スレ汚しで申し訳ないです。
0515nobodyさん
03/05/20 01:11ID:???my $path1 = $0;
print "$path1\n";
($_)= $path1 =~ /\\([^\\]+)$/;
$path1 = $_;
print "\$path1 :\n";
print "$path1\n\n";
my $path2 = $0;
print "$path2\n";
($_)= $path2 =~ /^.+\\(.+)$/;
$path2 = $_;
print "\$path2 :\n";
print "$path2\n\n";
$a='C:\Program Files\Apache Group\Apache\conf\httpd.conf';
($_)=$a=~ /^.+\\(.+)$/;
print "\$a :\n";
print;
print "\n";
$b='httpd.conf';
($_)=$b=~ /^.+\\(.+)$/;
print "\$b :\n";
print;
#--------------------------------------
0516nobodyさん
03/05/20 09:12ID:???print "$1";
っていうか use File::Basename; 使え。
0518515
03/05/20 12:30ID:???my $path1 = $0;
print "$path1\n";
($_)= $path1 =~ /\\([^\\]+)$/;
$path1 = $&;
print "\$path1 :\n";
print "$path1\n\n";
my $path2 = $0;
print "$path2\n";
($_)= $path2 =~ /^.+\\(.+)$/;
$path2 = $&;
print "\$path2 :\n";
print "$path2\n\n";
my $path3 = $0;
print "$path3\n";
($_)= $path3 =~ /[^\/\\]+$/;
$path3 = $&;
print "\$path3 :\n";
print "$path3\n\n";
my $path4 = $0;
print "$path4\n";
($_)= $path4 =~ /([^\\]\+)$/;
$path4 = $&;
print "\$path4 :\n";
print "$path4\n\n";
#--------------------------------------
0519515
03/05/20 12:33ID:???$a='C:\Program Files\Apache Group\Apache\conf\httpd.conf';
($_)=$a=~ /[^\/\\]+$/;
print "\$a :\n";
print "$&\n";
print "\n";
$b='httpd.conf';
($_)=$b=~ /[^\/\\]+$/;
print "\$b :\n";
print "$&\n\n";
$a='C:\Program Files\Apache Group\Apache\conf\httpd.conf';
($_)=$a=~ /([^\\]\+)$/;
print "\$a :\n";
print "$&\n";
print "\n";
$b='httpd.conf';
($_)=$b=~ /([^\\]\+)$/;
print "\$b :\n";
print "$&\n";
#--------------------------------------
スレ汚しに付き合って頂いて感謝でした。
0520nobodyさん
03/05/20 12:47ID:ridin1oOuse File::Basename;
$path = 'C:\Program Files\Apache Group\Apache\conf\httpd.conf';
$file = basename($path);
print $file;
0521あぼーん
NGNG0522山崎渉
03/05/22 01:59ID:???0523nobodyさん
03/05/25 03:32ID:???0524あぼーん
NGNG0525山崎渉
03/05/28 17:06ID:???ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
0526nobodyさん
03/06/06 19:09ID:GD1DFdBg[a-zA-Z0-9,\?]
で良いのでしょうか。
やりたいことは、↓です。
function check($address){
if ( ereg("^[a-z,A-Z,0-9,\(,\),\.,\_,\/,\+,\?,\-]+@[^.@!\"#$%&'()~^|]+\.[^@!\"#$%&'()~^|]*[^.@!\"#$%&'()~^|]$", $address)){
return true;
}
else{
return false;
}
}
$email_1 = "a(a)a?_s-/[email protected]";
$email_2 = "a(a)a_s-/[email protected]";
$email_1も$email_2もtrueが返ってきてほしいのに、
$email_2のみがtrueで返ってきます。。
?そのもにをマッチさせるにはどうすれば良いのでしょうか。
0527あぼーん
NGNG0530526
03/06/09 10:45ID:???はい。PHPです。どちらもtrueが返るようになりました。
原因は、「if ( ereg("^[a-z,〜〜〜」を通す前にさらにチェックしていてそこで引っかかっていました。
正規表現とは関係なくてすいませんでした。
>>529
そこはperlだったのですが参考になりそうなページでした。ありがとうございました。
0531yoko
03/06/10 13:46ID:QvCU0It/以下のような形式のテキスト ファイルを扱っています。生徒から備考までを
1 ブロックとして、生徒番号 800 までのブロックがあります。本当は XML か
CSV で管理するべきだと思うので近いうちに変換する予定です。
生徒: 1名前: 田中得意科目: 数学苦手科目: 古文備考: 2 学期より編入
生徒: 2名前: 山田得意科目: 国語苦手科目: 世界史備考: 模試未受験
生徒: 3
..
今正規表現をつかって各データの手直しをしているのですが、とても簡単なと
ころでつまづいています。
"生徒: 2" から "生徒: 2." という具合に、生徒行の数字の後ろにピリオドを
つけたいのですが、どのような表記で置換処理をしていいのかわかりません。
"生徒: [[0-9]+|[02-9]]" で "生徒:" とその数字部分を検索でヒットするこ
とはできるのですが、これを "生徒: [[0-9]+|[02-9]]." で置換しても "生徒:
[[0-9]+|[02-9]]." に入れ替わるだけです。大きな勘違いをしているとは思
うのですが…正規表現の資料をみてもここから先に進むことができません。
すごくつまらない質問だとは思いますが、どなたかみていただけないでしょう
か。
0532yoko
03/06/10 13:48ID:???書き直します。
生徒: 1
名前: 田中
得意科目: 数学
苦手科目: 古文
備考: 2 学期より編入
生徒: 2
名前: 山田
得意科目: 国語
苦手科目: 世界史
備考: 模試未受験
生徒: 3
..
0533nobodyさん
03/06/10 13:56ID:wps94NoxAAAAA http://www.a.com/
BBBBB http://www.b.com/
CCCCC http://www.c.com/
というタイトルとURLのペアのファイルがあるとします。
で、例えば
「AAAAAはBBBBBでCCCCC」
というテキストを
「<a href="http://www.a.com/">A</a>は<a href="http://www.b.com">〜」
みたいに変換したいです。
上記のペアでしたら、順に検索して置換すれば済むことですが、もし
最後の方に下記みたいなペアがあると
href http://www.href.com/
「<a <a href="http://www.href.com">="http://www.a.com〜」
のように変換されてしまいます。
こういう場合はどうすればいいんでしょうか?
できればそれぞれの置換したい単語が元のテキストを参照できるようにしたいです。
0534nobodyさん
03/06/10 14:34ID:???おそらく秀丸のヘルプ嫁。かと。
正規表現の互換があるかどうか判らないが Perl だと、
s/(生徒: \d?\d)/$1\./g; 等。
>>533
チョソなのでニポンコよくわからないてす。
ニポンコむつかしにだ。
0535nobodyさん
03/06/10 23:58ID:???ヘルプ開いて「タグ付き正規表現」というのを読めば幸せになれるかと
0536nobodyさん
03/06/11 01:31ID:???#!/usr/local/bin/perl
my $text = "AAAAAはBBBBBでCCCCCなhrefさ";
my %dictionary = (
"AAAAA" => "http://www.a.com/",
"BBBBB" => "http://www.b.com/",
"CCCCC" => "http://www.c.com/",
"href" => "http://hre.f.com/",
);
my $pattern = join('|', map { quotemeta($_) } keys(%dictionary));
$text =~ s/(${pattern})/<a href="$dictionary{$1}">$1<\/a>/g;
print "[$text]\n";
0537nobodyさん
03/06/11 02:54ID:???0538yoko
03/06/11 13:19ID:FQ/QXZetありがとうできました!
チュパ (←フェラ)
0542nobodyさん
03/06/11 16:25ID:u2aqyjyIすみません、一つ質問させてください。
HTMLファイル内のアンカータグで指定されているURLを全てエンコードして返すコードを書きましたが、どうも思う
ように動いてくれません。問題のコードは下記となっております。
-----------------------------------------------------
while(<FH>){
if($_ =~ /\<a.*?href.*?\=.*?\>/ig){
my $tmp = $_;
while($tmp =~ /(.*\<a.*?href.*?\=)(.*?)(\>.*?)(\<|\n)/ig){
my $tmp1 = $1; my $tmp3 = $3;
my $tmp2 = main::url_encode($2);#エンコードルーチン
$tmp2 =~ s/\%20//g; $tmp2 =~ s/\%22/\"/g;
$index_file .= $tmp1 . $tmp2 . $tmp3;
}
}
else{
$index_file .= $_;
}
}
-----------------------------------------------------
1行に2つ以上のアンカータグがあった場合を考えてwhileを使用しておりますが、その部分の正規表現に問題が
あるというところまでわかっていながら、全く前進せぬまま日が変わってしまいました。情けないです。
ここの正規表現の区切りとなるものが曖昧なことから、うまく認識してくれず、整形後のHTMLファイルがおかしく
なってしまっているのだと思われます。
もし宜しければ、教えてください。
すみませんが宜しくお願いいたします。
0544nobodyさん
03/06/11 19:24ID:???$reg "s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]";
while ( $txt =~ /$reg/g ) {
.
.
.
}
0545nobodyさん
03/06/11 20:35ID:???貴重なヒント感謝です。
しかし、厨房な私にはどうも理解できていないみたいです。
せっかくのヒントをいただきながら、本当に申し訳ありません。
0547nobodyさん
03/06/13 23:26ID:sIi8OqiB↑このような正規表現の場合、これは
頭が"$"or"%"or"@"のいずれかから始まって
続いて、アルファベット以外が来る場合。だと思うのですが?
最後の*?はどういう意味でしょうか?
*は0字以上、?は0か1だと覚えているのですが・・・
0548547
03/06/13 23:27ID:???強調表示するためのものです(perl版)。
0549nobodyさん
03/06/13 23:32ID:???0550nobodyさん
03/06/14 00:26ID:???0551547
03/06/14 00:29ID:???.*hogeに対して
.*?hoge
は、検索対象に対してhogeがヒットした一番最初の部分を
取るという事ですね!
例えば
hogeXXhogeXXhoge
の場合後者は最初のhogeでマッチ。前者は
3つめのhogeでマッチ!
という事ですね!?
0552547
03/06/14 00:32ID:???そ、そうなんですか!?
http://hidemaru.xaxon.co.jp/lib/hilight/perl_php.html
この作者のミスという事でしたか・・・。
しかし勉強になりましたです。
ありがとうございました。
0553nobodyさん
03/06/15 21:39ID:mUOjbxbY<!-- $aaa --> <!-- $bbb -->
と記入されていて、cgi本体で
$aaa = 'aaaの中身';
$bbb = 'bbbの中身';
と定義されている時
test.datをopenし
while(<FH>){
正規表現で$aaaなどの頭に$がついてるのを定義されている変数と置き換える
}
とするにはどうすれば良いでしょうか?
0554nobodyさん
03/06/15 22:16ID:???とりあえず、下のスクリプトで動くには動きますが。。。
$aaa = "あ";
$bbb = "い";
$ret = "\$aaa\$bbbb";
$Hash{'\$aaa'} = $aaa;
$Hash{'\$bbb'} = $bbb;
while(($key,$value)=each %Hash){
$ret =~ s/$key/$value/;
}
print "$ret\n";
#実行すると「あいb」と表示される。
0556553
03/06/15 23:18ID:/un8khu+おぉ〜どうもありがとう。
参考にさせてもらいます。
>>555
出し惜しみせずに書いたつもりでしたが・・・シンプルに書き直します↓
$bbb = 111;
$ccc = 222;
$aaa = 'XXX $bbb XXX $ccc XXX';
print なにか
出力結果
XXX 111 XXX $ccc XXX
というのをやりたいです。また$aaa に含まれる変数名 例$bbbなど
は1つだったり3つだったりとするので一般化したいです。
0558nobodyさん
03/06/15 23:32ID:???#!/usr/local/bin/perl
my $text = 'XXX $bbb XXX $ccc XXX $ddd XXX';
my $dictionary = {
"bbb" => "111",
"ccc" => "222",
};
sub replace_string {
my $dictionary = shift;
my $text = shift;
# $text =~ s/(\$(\w+))/$dictionary->{$2}?$dictionary->{$2}:$1/ge;
$text =~ s/(\$(\w+))/$dictionary->{$2}/ge;
return $text;
}
printf "[%s]\n", $text;
printf "[%s]\n", replace_string($dictionary, $text);
0562nobodyさん
03/06/16 03:58ID:???0564nobodyさん
03/06/16 07:28ID:???マタ〜リしすぎだしこのスレ
0565nobodyさん
03/06/19 09:48ID:zhmAwMLg今現在、<a name="1000</a>になってるソースを
<a name="1000">1000</a>に変更したいのですが
どうすればいいんでしょうか?
ちなみに「1000」の部分は「1」から「1000」までの連番で
<a name="1">1</a>
から
<a name="1000">1000</a>
のようにしたいんです。
ヘンテコな説明ですみません。
0566nobodyさん
03/06/19 10:26ID:???perlの場合はこんな感じかな。(変換前のHTMLが間違ってるけどそれでOKという前提で)
s/(<a name=")(\d+)(<\/a>)/$1$2">$2$3/;
0567nobodyさん
03/06/19 10:51ID:???http://www.2ch.net/
http://www2.2ch.net/
上のすべてに対応するためにはどのように書いたらいいのでしょう?
http://(www\.|www2\.)?2ch\.net/
???
0568nobodyさん
03/06/19 10:56ID:bERWsbmj0572565
03/06/19 21:37ID:???レス遅れてすみません凹
早速、やってみたんですが
思ったように出来ませんでした(>_<)
それと申し遅れましたが、自分
「speeeeeed」というソフト使ってるんですが
このソフトで正規表現を使った置き換えが
出来たらうれしいんです。
わがまま言ってすみません。。
0573nobodyさん
03/06/19 21:45ID:???BREGEXP.DLL導入すれば正規表現使えるって書いてあるから導入すればいいんじゃないのん?
やりかたはHELPに書いてあった。
0574565
03/06/19 21:58ID:???すいません「e」が一個多かったですね^^;
はい、BREGEXP.DLLは導入済みなんですが
正規表現の構文?がわからないので・・・(涙
0576nobodyさん
03/06/19 23:04ID:???0578576
03/06/20 00:11ID:???取り敢えず、簡易ながら
\da-zA-Z\-]+(?:\.[\da-zA-Z\-]+)+
で落ち着いきたく思うのですが、
ENVの中のHTTP_FROMとかHTTP_SP_HOST内で使うには問題ありませんでしょうかね‥?
0579576
03/06/20 00:13ID:???[\da-zA-Z\-](?:\.[\da-zA-Z\-])+
デス。
0580nobodyさん
03/06/20 00:35ID:???0581nobodyさん
03/06/20 00:55ID:???でも、HTTP_SP_HOSTはHOSTと書いてある時点で入る可能性は否定出来ないのでは?
0582nobodyさん
03/06/20 01:04ID:???0583nobodyさん
03/06/20 01:15ID:???0584576
03/06/20 01:28ID:???[^@]\b([\da-zA-Z\-]+(?:\.[\da-zA-Z\-]+)+)\b[^@]
これでは対象が先頭から始まる場合、もしくは末尾で終わる場合にマッチしません‥
ダサイ回避策として、検索する文字列に予め先頭と末尾にスペースを入れるという方法がありますが、
正規表現のみで解決する良い手段はないでしょうか???
0585nobodyさん
03/06/20 01:38ID:???入ることはないでしょ。
何が含まれているかわからない中からホストを完璧にマッチさせる
正規表現は不可能だし、メールアドレスもまあまあマッチすれば
いいなら、過去ログであったはず。
0586576
03/06/20 01:44ID:???なんとか自己解決しました。
一応どんなものになったかカキコしておきますね。
(?:^|[^@]\b)([\da-zA-Z\-]+(?:\.[\da-zA-Z\-]+)+)(?:\b[^@]|$)
0587nobodyさん
03/06/20 01:51ID:???ホスト名にマッチするようにしたら、
メールアドレスにマッチするわけないと思うのだが・・・
0588587
03/06/20 01:53ID:???0591あぼーん
NGNG0592nobodyさん
03/06/21 02:30ID:???<a href="../test/read.cgi/mysv/1044358074/115" target="_blank">>>115</a>
で、URL部../test/read.cgi/mysv/1044358074/115と >> より後の数字を不特定で
マッチさせたいのですがどう表記すればよいでしょうか。お願いします。
0595nobodyさん
03/06/21 11:57ID:NfKIfdiTaaa,"bbb,ccc",ddd
とかも正しく分解できる奴
0596595
03/06/21 12:00ID:???失礼
0597nobodyさん
03/06/22 03:04ID:pHsSEvkKページ内からリンクとリンクを張られた文字を全て取得したいのです
このスレの>>432に似てるのですが、張られた文字も取得したいのです
例えば、<a href="URL">文字列</a>だったら「URL」「文字列」の両方です
自分でもいろいろやってみたのですが、上の例のような形のモノしか取得できません
もう少し、柔軟に取得できるものがいいのですが
preg_match_all ("|<a href=\"([^>]+)\">([^<]+)</a>|U", $contents, $out, PREG_SET_ORDER);
私にはこれが限界です、よろしくお願いします
0598nobodyさん
03/06/22 04:17ID:???<a\s[^>]*?href="((https?|ftp):\/\/[-!\#\$%&'()*+,.\/:;=?\@~\w]+)"[^>]*?>([\s\S]+?)<\/a>
0599597
03/06/22 04:51ID:???ありがとうございます。
できれば下のに対応できるくらい柔軟なものってできませんか?
<a href="http://www.aaa.aaa">通常リンク</a>
<A HREF"http://www.aaa.aaa">タグが大文字</a>
<a href=http://www.aaa.aaa>クォート無し</a>
<a href='http://www.aaa.aaa'>ダブルクォートの代わりにシングルクォート</a>
<a href="./test.html">省略リンク</a>
<a href="ftp://www.aaa.aaa">ftp通常リンク</a>
<a href="https://www.aaa.aaa">https通常リンク</a>
<a href = "http://www.aaa.aaa">イコールをスペースで囲む</a>
< a href="http://www.aaa.aaa">aをスペースで囲む</a>
<a href="http://www.aaa.aaa" aaa="aaa">他要素がある</a>
<a href="http://www.aaa.aaa"><b>他のタグもリンク</b></a>
<a href="http://www.aaa.aaa">aとhrefの間が長い</a>
(最後はわかりやすいよう全角スペースにしてます)
0603nobodyさん
03/06/22 14:27ID:???/* */
からなるコメント文を消すには、どう書けばいいんですか?
0604597
03/06/22 16:22ID:???ちょっとくらい稽古つけてくださいよ
こんな感じで頑張ってはいるんですよ
preg_match_all ("/<\s*a\s[^>]*?href\s*=\s*(?:\"|\'|)([-!\#\$%&()*+,.\/:;=?\@~\w]+)(?:\"|\'|)[^>]*?>([\s\S]+?)<\/a>/i",
$contents, $out, PREG_SET_ORDER);
0605nobodyさん
03/06/22 18:20ID:???「aをスペースで囲む」ってのに対応するのはナンセンスな気がするな。
つーか、正規表現一つで処理せなあかんの?
"#<a[^>]*\shref\s*=\s*(?:\"([^\"]+)\"|'([^']+)'|(\S+))[^>]*>(.+?)</a>#i"
0607603
03/06/22 18:24ID:???<a alt="" href=""> はありえないことが確定してるの?
0608nobodyさん
03/06/22 18:29ID:???0609nobodyさん
03/06/22 20:57ID:???0610nobodyさん
03/06/22 23:44ID:???name = " anchor_id "
HREF = https://www.hogehoge.com/
target = ' _blank '
>
ほ <b> げ </b> ほ <i> げ </i>
</a
>
0611nobodyさん
03/06/23 00:44ID:???0612nobodyさん
03/06/23 00:48ID:???ここは別に最初から最後まで手取り足取り教える為のスレッドじゃないんだよ
>>598 で充分過ぎるほどヒント出てるんだから、自分で「正規表現」を
習得しつつコードを書こうという気は起きないのかい?
0613597
03/06/23 02:57ID:???今まで見てきたHTMLで「文法はおかしいけれどありそうなもの」
「このくらいならありえるかな」ってのを>>599にいくつかピックアップしてみました
ちょっとありえないものもあるかもしれません
万能(に近い)リンク抽出正規表現ってのをつくってみませんか?
>>599のリストに、他にもありえそうなものを追加して……
0614nobodyさん
03/06/23 03:03ID:???とりあえずそろそろウザイ。
0615597
03/06/23 03:11ID:???スマソ
とりあえず>>599から>>605にあるように「aをスペースで囲む」を無くして
>>610にも対応したもの
#<a[^>]*\shref\s*=\s*(?:\"([^\"\s]+)\"|'([^'\s]+)'|([^>\s]+))[^>]*>(.+?)</a>#i
0616nobodyさん
03/06/23 03:23ID:???0619nobodyさん
03/06/23 05:27ID:???・hrefの前に>があったら失敗するな(ex. title="<1>")
・行に2つ以上anchorがあったら1つめのマッチングで
最後の</a>までマッチしそうだ
まあがんがれ
0622nobodyさん
03/06/23 18:33ID:???0623nobodyさん
03/06/23 18:50ID:???0624nobodyさん
03/06/23 18:56ID:???0625597
03/06/23 18:57ID:???</a>で閉じられてないってのはどういうことっすか?
「< /a >」だとか「</a <!-- /ここまで -->>」とかですか?
リンクを正規表現で抽出する前に、コメントを取り除いたほうがいいですよね
それとも男なら一度にやるべきでしょうか……
PHPなら「アンカータグ以外を取り除く」なんて簡単に出来ちゃいますし
0626597
03/06/23 19:29ID:???対応しなくてもいいかな、と思いつつ一応やってみたら
<a title="<aaa>" href="http://www.aaa.aaa">他要素の中に<>がある</a>
<a href="http://www.aaa.aaa"><!-- リンク </a> -->文字列にコメントがある</a>
のようなものも上の正規表現で問題なく抽出できました、なんでだろう?w
0627597
03/06/23 19:32ID:???「< /a>」はIE6で正常にリンクされてます。
仕様よりもIEを基準にするな!って怒らないでくださいね
0628nobodyさん
03/06/23 19:43ID:???<a> が明らかに閉じてるべきとこまではリンクと見做してくれてるんでしょ。
アフォな HTML 作成者を救うために。
ところで、パレートの法則って知ってる?
つーか、アンカータグの抽出なんてこのスレでも思いっきり概出やろ。
0629nobodyさん
03/06/23 20:43ID:???IE?いつまでバカブラウザをマンセーしているつもりだよ(つД`)
<a>はインライン要素。
http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html401j/struct/links.html#edef-A
0630nobodyさん
03/06/23 22:32ID:???>アンカータグの抽出なんてこのスレでも思いっきり概出やろ。
だけどこの質問者は「万能な」ものを求めてる。
HTMLがいくら間違ってても抽出したいと思ってるわけだ。
#その時点でオ�hルんだがな。
0631nobodyさん
03/06/23 23:57ID:???0632nobodyさん
03/06/24 00:17ID:VrEbx1+X正規表現を使って、あるテキストの先頭から10行目を取得する書き方が、
解りません…どたか教えて下さい。どうか、お願いします。
JDK1.4.1の正規表現クラスを使ってます。
0633nobodyさん
03/06/24 00:20ID:VrEbx1+X0634nobodyさん
03/06/24 00:58ID:???0635nobodyさん
03/06/24 01:39ID:???$line10 = (split(/\n/, $text))[9];
0638nobodyさん
03/06/24 03:09ID:???/\A((?:.*\n){0,10})/m
0639名無しさん@Meadow
03/06/24 07:35ID:???\Aて何?Perlじゃないでそ。
0640nobodyさん
03/06/24 09:10ID:???文字の最初だよ・・・
ttp://www.kt.rim.or.jp/~kbk/regex/regex.html
見て勉強しなおしなされ
0641名無しさん@Meadow
03/06/24 10:27ID:???べんきょ足りんですた。逝って来マウス。
0642nobodyさん
03/06/24 13:05ID:???title="<aaa>"は正当だよ。
title="<aaa>"と書かれていたときはtitle="<aaa>"と
解釈しなくてはならないが、title="<aaa>"と書いてはいけないという
意味ではない。&を&と書かないと誤解釈する可能性が
あるという問題とごっちゃにされてるんだろうな。
0643nobodyさん
03/06/24 13:10ID:???それならせめてどういう謎HTMLも許容したいのか
仕様を明確にしてくれないと作りようがない。
0644nobodyさん
03/06/24 14:07ID:???0649nobodyさん
03/06/24 18:14ID:???(゚Д゚≡゚Д゚)エッナニナニ?本当か?
0650nobodyさん
03/06/24 18:25ID:???とか
>万能(に近い)リンク抽出正規表現ってのをつくってみませんか?
みたいな他力本願なレスは激しく萎える事に>>597は気づいているのかなー?
0651597
03/06/24 18:45ID:???「今更リンクの抽出かよ……」なんて萎える人もいるでしょうが
まあ暇だし付き合ってやるか、という人もいるかなと思ってはじめました
他力本願ですが、道場ということで甘えてみましたw
>>643-645
仕様といっても難しいので、ありえそうなものを考えると
>>599>>610>>626あたりになるのかなって感じです
今出てるものでは>>615ですべて対応できてるはずです
つーか実際に間違ってるHTMLって多いですよね
リンクを抽出することを考えたときに
HTML書いた人に直すようにメールするか
対応した正規表現にするかどっちが早いかって話です
0652nobodyさん
03/06/24 18:51ID:???0655nobodyさん
03/06/27 13:05ID:???$_ = "w439soz980i505";
@a = /^(?:(\w)(\d{3}|[ao]))+$/;
上のような正規表現で、括弧に入った文字列を全て@aに入れたいんですが、
実際にはループの最後の"i"と"505"だけしか入りません。
全てを@aに入れる方法はあるんでしょうか?
0656nobodyさん
03/06/27 14:07ID:???@a = /((\w)(\d{3}|[ao]))+?/g;
@aの中身 w439 w 439 so s o z980 z 980 i505 i 505
0657nobodyさん
03/06/27 23:00ID:???$fn =~ s/\W/\0/g;
$fn =~ s/\0/\|/g;
は、一体どういう処理をしているのか判る方いませんでしょうか
0660nobodyさん
03/06/28 04:40ID:???$fn =~ s/\W/\|/g;
じゃないんだろう
0661nobodyさん
03/06/28 04:59ID:???0664nobodyさん
03/06/28 19:23ID:???0665nobodyさん
03/06/29 09:15ID:???0667nobodyさん
03/06/30 16:44ID:???0669nobodyさん
03/06/30 17:12ID:???0670nobodyさん
03/07/03 21:15ID:???0672nobodyさん
03/07/10 13:41ID:???2,143,184という風に3桁ごとにカンマを入れるにはどうしたらいいですか?
おしりからマッチさせることができれば簡単なんですが。
この桁数だと,
/^([0-9]{,2})([0-9]{3})([0-9]{3})$/
を
\\1\,\\2\\3
としたらできるんですが,もっときれいにできる方法を教えてください
0673672
03/07/10 13:50ID:qpJaCER1○ \\1\,\\2,\\3
0676あぼーん
NGNG0677山崎 渉
03/07/15 11:08ID:???__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0678nobodyさん
03/07/15 22:27ID:bkNlTgQn$str =~ s/(^|<br>)>.*?(?=<br>|$)/<blockquote>$&<\/blockquote>/g;
$srt =~ s/<\/blockquote><blockquote>//g;
このような正規表現を書きました。
でもなんかスマートではないので、
上記二つのをまとめて表すにはどうすればいいのでしょうか?
0679nobodyさん
03/07/16 00:28ID:???正規表現してください,お願いします。
0680nobodyさん
03/07/16 00:42ID:???つか何でblockquote?
0683nobodyさん
03/07/16 02:15ID:???0685nobodyさん
03/07/16 22:57ID:???掲示板なんかで、引用符「>」「>」から先の文字の色を変えるにはどうしたらいいですか?
0687679
03/07/17 00:29ID:???0689679
03/07/17 01:28ID:???$line =~ s/^(..)(...)//;を、PHPで使いたいんでどのように正規表現したら、
いいでしょうかということで・・・
0691nobodyさん
03/07/17 02:26ID:???そのperlの文が何をしてるか分かってる?
perl互換の正規表現は preg_* で使えるから、PHPのマニュアルをよく読んでごらん。
0692nobodyさん
03/07/17 09:54ID:???0694679
03/07/17 17:32ID:???0697nobodyさん
03/07/18 10:04ID:qmPObEGpPHP4.2.3-9でタグの外側の文字のみ置換したい
<?
$word = "<a href=\"http://hoge.hoge/bb/\">link Bb</a>";
echo "これを$word<br>\n";
$word2 = "<a href=\"http://hoge.hoge/bb/\">link <b>B</b><b>b</b></a>";
echo "こうしたい$word2<br>\n";
$word = preg_replace("/((?:\G|>)[^<]*?)(b)/i","\\1<b>\\2</b>",$word,-1);
echo $word;
?>
実行結果は
<a href="http://hoge.hoge/<b>b</b>b/">link <b>B</b>b</a>
になりました。
0698697
03/07/18 10:04ID:qmPObEGp#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
$word = "base bb<a href=\"http://hoge.hoge/bb/\">link Bb</a>bg big";
print "これを$word<br>\n";
$word2 = "<B>b</B>ase <B>b</B><B>b</B><a href=\"http://hoge.hoge/bb/\">link <B>B</B><B>b</B></a><B>b</B>g <B>b</B>ig";
print "こうしたい$word2<br>\n";
$word =~ s/((?:\G|>)[^<]*?)(b)/$1<B>$2<\/B>/ig;
print "$word";
実行結果は
<B>b</B>ase <B>b</B><B>b</B><a href=\"http://hoge.hoge/bb/\">link <B>B</B><B>b</B></a><B>b</B>g <B>b</B>ig
で意図したとおりになりました。
PHPのpreg_replaceはPerl互換なのに、実行結果が異なるのでしょうか?
0699nobodyさん
03/07/18 13:23ID:yTICzsYGhttp://jp.php.net/manual/ja/pcre.pattern.syntax.php
6. Perlの\G言明は、一回のパターンマッチに関するものではないため、 サポートされません。
0700nobodyさん
03/07/18 17:43ID:???0701697
03/07/18 17:49ID:qmPObEGpあれれ。そうなんですか。
PHPでどう書けばいいんだろう。
0702nobodyさん
03/07/18 22:35ID:5012QaLa$word = preg_replace("/((?:^|>)[^<]*?)(b)/i","\\1<b>\\2</b>",$word,-1);
0703703 ◆jhDfq/C6oU
03/07/21 06:22ID:vOgKMI0a$q1 =~ s/\b1\b/12番目/;
$q1 =~ s/\b2\b/16番目/;
[$q1]が[1]ならば『12番目』を、
[2]だったら『16番目』と置換えたいのですが、
[$q1]が[1]だった時、『12番目16番目』と置換えられてしまいます。
勘違いかもしれませんが、『\b』で境界をやってみても変わりません。
どのようにすると良いでしょうか?
ご教授お願い致します。。。
p.s 条件分岐のほうがいいのでしょうか?
0704nobodyさん
03/07/21 09:20ID:???漏れのところでは動いているが。
$q1 = '0 1 11 12 2 21 22 3 4 5 9';
$q1 =~ s/\b1\b/12番目/;
$q1 =~ s/\b2\b/16番目/;
printf qq($q1\n);
出力
0 12番目 11 12 16番目 21 22 3 4 5 9
0705nobodyさん
03/07/21 18:05ID:???$a[0] = "HyperTextTransferProtocol = HTTP";
$a[1] = "UniversalResourceLocation = URL";
$a[2] = "DataBase = DB";
これらの=より前の部分を大文字にしてスペースで区切って
HYPER TEXT TRANSFER PROTOCOL
UNIVERSAL RESOURCE LOCATION
DATA BASE
と出力させたい。
どなたかご教授願います。
0706nobodyさん
03/07/21 18:21ID:???$a[0] =~ s/([a-z]+)/\1 /g;
print $a[0] . "\n";
$a[0] =~ tr/a-z/A-Z/;
print $a[0] . "\n";
0707706
03/07/21 18:23ID:???foreach ( @a ) {
s/([a-z]+)/\1 /g;
tr/a-z/A-Z/;
}
0708nobodyさん
03/07/21 18:36ID:???0710697
03/07/22 10:45ID:FAepGeTTすごい! 動きました。
ありがとうございます。
0712697
03/07/22 10:52ID:FAepGeTT$word = "base bb<a href=\"http://hoge.hoge/bb/\">link Bb</a>bg big";
$word = preg_replace("/((?:^|>)[^<]*?)(b)/i","\\1<b>\\2</b>",$word,-1);
結果
<b>b</b>ase bb<a href="http://hoge.hoge/bb/">link <b>B</b>b</a><b>b</b>g big
になりました。
一部置換されないみたいです。。
0714あぼーん
NGNG0715702
03/07/22 15:04ID:+ex6aWifすまん。
$word = "base bb<a href=\"http://hoge.hoge/bb/\">link Bb</a>bg big";
$word = preg_replace('/(?:^|(?<=>))([^<]*)/e', "preg_replace('/(b)/i','<b>\\\\1</b>','\\1')", $word);
echo $word;
で多分OK.
http://www.din.or.jp/~ohzaki/regex.htm#ReplaceOutside
を参考にした。
>>711
ワラタ.ゴメソ.
0716あぼーん
NGNG0717697
03/07/22 15:36ID:FAepGeTTすごい!
ありがとうございます。
ちゃんと置換されてました!
0718nobodyさん
03/07/24 18:38ID:9bbcZ2D/Perlメモを見ると、長いバージョンと短いバージョンが以下のようにかかれてますが・・・
$http_URL_regex =
q{\b(?:https?|shttp)://(?:(?:[-_.!~*'()a-zA-Z0-9;:&=+$,]|%[0-9A-Fa-f} .
q{][0-9A-Fa-f])*@)?(?:(?:[a-zA-Z0-9](?:[-a-zA-Z0-9]*[a-zA-Z0-9])?\.)} .
q{*[a-zA-Z](?:[-a-zA-Z0-9]*[a-zA-Z0-9])?\.?|[0-9]+\.[0-9]+\.[0-9]+\.} .
q{[0-9]+)(?::[0-9]*)?(?:/(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f]} .
q{[0-9A-Fa-f])*(?:;(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-} .
q{Fa-f])*)*(?:/(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f} .
q{])*(?:;(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*)*)} .
q{*)?(?:\?(?:[-_.!~*'()a-zA-Z0-9;/?:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])} .
q{*)?(?:#(?:[-_.!~*'()a-zA-Z0-9;/?:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*} .
q{)?};
s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+
http:// or https:// がないパターンの正規表現っていうのは、
上記から、
長いバージョンは、(?:https?|shttp):// をとりのぞいたもの、
短いバージョンは、s?https?:// をとりのぞいたもの、
っていう認識は、あってますか?
0720あぼーん
NGNG0723nobodyさん
03/07/25 00:18ID:???取り除いて残るのは [-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+ だよな?
[ ] 内の文字が1文字以上ってことだ
1-1=2
(,,-_-)
(~*~)ohhoho(-_-;)
1000Get!!
いろいろマッチするけどいいのか?
まあ使う場所によってはいいのかもしれないが
0725nobodyさん
03/07/25 01:15ID:???その辺考えれば解ると思うが…
0726nobodyさん
03/07/27 03:01ID:2mIqT5H5linuxのコマンドライン上で、カレントディレクトリ以下からabcま
たはdefを含むファイル名を表示させたいのですが、
find|grep (abc|def)とかやってもだめなんです。どうすれば
よいんでしょうか?
0728nobodyさん
03/07/27 09:47ID:???port番号とユーザ名、パスワード、追加情報 が抜けてるぞ。
http://tokyo.cool.ne.jp/masapico/api_InternetCrackUrl.html
0729726
03/07/27 09:52ID:95lYaVNFありがとうございました!
0730あぼーん
NGNG0732732
03/07/27 13:16ID:dJWoBMBZ$a内の『7月27日』を『7/27』に換えたいんですが、
$data =~ s/7月27日/7/27/g;
と、すると区切りのスラッシュがダブってしまいますよね。
こんなときの対処方法がご存知でしたら、
御教授お願い致します。
0734nobodyさん
03/07/27 13:51ID:???0739732
03/07/27 15:07ID:dJWoBMBZ$data =~ s/7月27日/7/\27/g;
[\]位置が逆でした(汗
ありがとうございます。
もう一つ御教授頂きたいのですが、
$data =~ s/ソ/そ/g;
こちらの置換がエラーとなってしまいます。
解決方法はございますか?
0742nobodyさん
03/07/27 17:54ID:???欺(0x8B5C) 圭(0x8C5C) 構(0x8D5C) 蚕(0x8E5C) 十(0x8F5C) 申(0x905C)
曾(0x915C) 箪(0x925C) 貼(0x935C) 能(0x945C) 表(0x955C) 暴(0x965C)
予(0x975C) 禄(0x985C) 兔(0x995C) 喀(0x9A5C) 媾(0x9B5C) 彌(0x9C5C)
拿(0x9D5C) 杤(0x9E5C) 歃(0x9F5C) 濬(0xE05C) 畚(0xE15C) 秉(0xE25C)
綵(0xE35C) 臀(0xE45C) 藹(0xE55C) 觸(0xE65C) 軆(0xE75C) 鐔(0xE85C)
饅(0xE95C) 鷭(0xEA5C) �x(0xED5C) �x(0xEE5C) �\(0xFA5C) �\(0xFB5C)
0743nobodyさん
03/07/27 18:05ID:???0744nobodyさん
03/07/27 21:27ID:???0745nobodyさん
03/07/28 12:23ID:???0746nobodyさん
03/07/28 13:12ID:???曾 よーく見ると絵に見えてくる文字 曾
http://life2.2ch.net/test/read.cgi/kankon/1052576557/
0749nobodyさん
03/07/29 23:53ID:???一桁〜二桁の数字をあぶり出したいのですが、[0-9][0-9]とかだと二桁数字しか見つけられないっす。
if(($_==[0-9])||($_==[0-9][0-9]))みたいな形にするしかないのかな…
0750nobodyさん
03/07/30 00:06ID:???[0-9][0-9]?
[0-9]{1,2}
\d\d?
\d{1,2}
とか?
0753nobodyさん
03/07/30 03:47ID:???漏れも始めのうちは勘違いしてたけど、* とか + とか {n,m} とかは、
「前の文字(列)」の繰り返しじゃなくて、「前の正規表現パターン」の繰り返しだからね。
0754nobodyさん
03/07/30 07:23ID:zn2EBRaLに対して、真ん中の<table>〜</table>だけを簡単にうまく抽出できないでしょうか?
$str =~ s/<table>(^(<table>))*?<\/table>//;
なんて文字列に対するキャレットみたいなのが有ればいいのですが。
$tmp = $str;
while($tmp =~ m|<table>(.*?)</table>|) {
0755途中送信スマソ
03/07/30 07:26ID:???に対して、真ん中の<table>〜</table>だけを簡単にうまく抽出できないでしょうか?
$str =~ s/<table>(^(<table>))*?<\/table>//;
なんて文字列に対するキャレットみたいなのが有ればいいのですが。
$tmp = $str;
while ($tmp =~ s/<table>(.*?<\/table>)/\1/) { }
$str =~ s/$1//;
とするしかないのかな?
0757あぼーん
NGNG0758nobodyさん
03/07/30 11:57ID:xaoebVIFJavaScriptでタグの外側の文字のみ置換したい (IE6)
<html><body><script language="JavaScript">
<!--
//PHP
//$word = preg_replace('/(?:^|(?<=>))([^<]*)/e', "preg_replace('/(b)/i','<b>\\\\1</b>','\\1')", $word);
//Perl
//$word =~ s/((?:\G|>)[^<]*?)(b)/$1<b">$2<\/b>/ig;
word = "base bb<a href=\"http://hoge.hoge/bb/\">link Bb</a>bg big";
word2 = "<b>b</b>ase <b>b</b><b>b</b><a href=\"http://hoge.hoge/bb/\">link <b>B</b><b>b</b></a><b>b</b>g <b>b</b>ig";
document.write("これを"+word+"<br>");
document.write("こうしたい"+word2+"<br>");
result = word.replace(/(?:^|(?<=>))([^<]*)/e,word.replace(/(b)/i,\"<b>$1</b>\")");
document.write(result+"<br>");
//-->
</script></body></html>
正規表現も言語によってまちまちですね。
実行するとまっしろです。。
0760758
03/07/30 13:31ID:xaoebVIF正規表現で構文エラーが発生しました。
(?<=>)がいけないみたいなのですが、なぜでしょう?
0761758
03/07/30 15:17ID:xaoebVIF0763758
03/07/30 16:02ID:xaoebVIFあ、やっぱり。
(?<=を自分で作ってやらないといけないわけね。
0764nobodyさん
03/07/30 16:06ID:???0765あぼーん
NGNG0766758
03/07/30 16:21ID:xaoebVIFうーん --;
別の方法考えたほうが早いかな?
0767あぼーん
NGNG0768nobodyさん
03/07/31 02:36ID:???<a href="c0.html" title="capter0>prologue" target="_blank">
みたいなtagがあったら期待外れの置換をするんじゃないか?
0771nobodyさん
03/07/31 09:42ID:???>は>にしろよ。
って言っても屁理屈こねるだろうから
$word = q|base bb<a href="http://hoge.hoge/bb/" title="capter0>prologue" target="_blank">link Bb</a>bg big|;
$word =~s/(^|<(?:[^<>]*"[^"]*"[^<>]*)*>|<(?:[^<>]*'[^']*'[^<>]*)*>|<[^<>"]+>)([^<]*)
/my $tmp1 = $1; (my $tmp2 = $2) =~ s!(b)!<b>$1<\/b>!ig; $tmp1.$tmp2/xegs;
print $word;
同様にJavaScriptでも
function hoge () {
word = "base bb<a href=\"http://hoge.hoge/bb/\" title=\"2>1\" blank=\"_blank\">link Bb</a>bg big";
re = new RegExp("(^|<(?:[^<>]*\"[^\"]*\"[^<>]*)*>|<(?:[^<>]*\'[^\"]*\'[^<>]*)*>|<[^<>\"]+>)([^<>]+)", "g");
result = word.replace(re,
function test (str, p1, p2) {
re = new RegExp("(b)", "ig");
p2 = p2.replace(re, "<b>$1</b>");
return p1+p2;
}
);
alert(result);
}
0772771
03/07/31 10:27ID:???$word =~s/(^|<(?:[^<>'"]*"[^"]*"[^<>'"]*|[^<>'"]*'[^']*'[^<>'"]*)+>|<[^<>'"]+>)([^<>]*)
/my $tmp1 = $1; (my $tmp2 = $2) =~ s!(b)!<b>$1<\/b>!ig; $tmp1.$tmp2/xegs;
print $word;
function hoge () {
word = "base bb<a href=\"http://hoge.hoge/bb/\" title='\"2>1\"1>1' target=\"_blank\">link Bb</a>bg big";
re = new RegExp("(^|<(?:[^<>'\"]*\"[^\"]*\"[^<>'\"]*|[^<>'\"]*'[^']*'[^<>'\"]*)+>|<[^<>'\"]+>)([^<>]*)", "g");
result = word.replace(re,
function test (str, p1, p2) {
re = new RegExp("(b)", "ig");
p2 = p2.replace(re, "<b>$1</b>");
return p1+p2;
}
);
alert(result);
}
の方が正確か。
0773nobodyさん
03/07/31 10:47ID:???javascript 嫌いだからどうでもいいが
0775nobodyさん
03/07/31 11:31ID:???0776nobodyさん
03/07/31 12:58ID:???5年前の知識をそのまま使ってないか?
0777nobodyさん
03/07/31 20:05ID:???http://www.ne.jp/asahi/minazuki/bakera/html/reference/headmisc#script
0778758
03/08/01 09:15ID:9x/frkaPJavaScriptでも出来るんだ。
RegExp("(^|<(?:[^<>'\"]*\"[^\"]*\"[^<>'\"]*|[^<>'\"]*'[^']*'[^<>'\"]*)+>|<[^<>'\"]+>)([^<>]*)", "g");
これを自分で解析できないってことは、自力なんてとても無理ですね。
あーあ勉強不足。
0779nobodyさん?
03/08/02 00:16ID:lx3eHYOpを入力されたら困るので、英数字といくつかの記号と日本語
(EUC-JPで文字セットはJIS X0208の範囲)だけに限定したいのですが、
/[\w_\-: -(?:\xFE\xFE)/
であってますか?
0780nobodyさん?
03/08/02 01:18ID:???0781nobodyさん
03/08/02 08:54ID:???0782nobodyさん
03/08/05 02:36ID:???↑これってHTMLとかのタグ(+中身)を表すと思ったのですが、間違ってますか?
2ちゃんの適当なスレッドを読み込んで、サクラエディタで空文字""に置換して
txtにしようとすると、置換が永遠に行われ続けます・・。なじぇ?(;´Д⊂
0785nobodyさん
03/08/07 15:09ID:???Perlメモには超長いのが載ってますが・・・
ちなみに自分は、
/[\w\.\-\_]+\@[\w\.\-\_]+\.[a-zA-Z]{2,5}$/
ってやってるんですが・・・
0787nobodyさん
03/08/07 18:00ID:???マッチさせるのってどうやればよいのでしょうか?
0792nobodyさん
03/08/07 19:07ID:???0794nobodyさん
03/08/10 18:11ID:???"<!--[^(-->)]*-->"
じゃないの?(;´Д⊂
0795nobodyさん
03/08/10 18:21ID:???アンカーのアドレスと中身を抽出する正規表現教えて
0796nobodyさん
03/08/10 19:17ID:???そんな質問>>2を読めって言われるだけだ。
まあ可哀想だから回答しといてやる。
>>2嫁。
・おまけ
[^(-->)]←こんな書き方できんぞ。
0797nobodyさん
03/08/10 19:24ID:???0798nobodyさん
03/08/11 22:10ID:???0799nobodyさん
03/08/11 23:28ID:DlYo/nU/為替レートなのですが
こう言う表記がされていて
118と33と38と-0.78を抜き出したいのでつ。
もう一つのパターンが1.1332-37(0.0025)
なのでつが
1.1332と1.1337と0.0025を抜き出したいのでつ。
お願いします。
0800nobodyさん
03/08/11 23:32ID:2ChtRC4J制服姿もよく似合います。パイパン?と思われるほど陰毛が激薄なので
指姦、挿入シーンは注目してみてください!
フェラのテクニックなんかはやっぱり十代のそれとは比べ物になりませんね。
素人援交女の悶絶痴態 !
無料ムービー観てね
http://www.geisyagirl.com/
0801nobodyさん
03/08/12 00:10ID:???$str = '118.33-38(-0.78)';
if ( $str =~/(\d+)\.(\d+)-(\d+)\((\-?\d+\.\d+)\)/ ) {
$str1 = $1;
$str2 = $2;
$str3 = $3;
$str4 = $4;
}
print $str1,"\n";
print $str2,"\n";
print $str3,"\n";
print $str4,"\n";
$str = '1.1332-37(0.0025)';
if ( $str =~/(\d+\.\d+)-(\d+(?:\.\d+)?)\((\-?\d+\.\d+)\)/ ) {
$str1 = $1;
$str2 = substr($str1, 0, length($money1)-length($2)).$2;
$str3 = $3;
}
print $str1,"\n";
print $str2,"\n";
print $str3,"\n";
0802nobodyさん
03/08/12 08:50ID:3acz8emqhttp://www.book-i.net/ad07
0803(^o^)/...http://pleasant.e-city.tv/
03/08/12 21:11ID:P8GdC1tUhttp://pleasant.e-city.tv/
0804nobodyさん
03/08/13 03:36ID:+G82bcJ9メールヘッダを解析するプログラムを作っているのですが、
「
Yahoo!オークション - 自動再出品:---.---(c00000000)
Mime-Version: 1.0」
このようなヘッダのsubject部だけを取り出そうと
$subject =~ s/(.*)\n.+?\:\s*?.+?/$1/s;
こういう正規表現を書きました。
しかし、取り出し結果は
「
Yahoo!オークション - 自動再出品:---.---(c00000000)1.0」
こうなっております。
なぜ、「Mime-Version: 」だけ取れたのか、不思議で仕方ありません。
なぜならば、
$subject =~ s/(.*)(\n.+?\:\s*?.+?)/$1$2/s;
こうやるとしっかりとそのまま出るからです。
空回りしているのは承知ですが、どうか教えてください。
宜しくお願いいたします。
0805nobodyさん
03/08/13 04:07ID:???正規表現の後半の部分が \:\s*?.+? だと最短マッチだから ": " にマッチするから、
"1.0" が残ったんでしょ。
0806nobodyさん
03/08/13 04:18ID:???$subject =~ s/(.*)(\n.+?\:\s*?.+?)/[$1][$2]/;
ところで、正規表現パターンに s オプションがついてるけど、それどゆ意味?
0807nobodyさん
03/08/13 04:38ID:???夜遅くに、本当に有難うございました。
やはり空回りしてましたね。
最後の?をとったらあっさり通りました。
ということは、半角スペースはピリオドでは引っかからないと
いうことですかね。これはこれで今ごろ知りました。やばい。
s オプションをつけたのは、改行が含まれるからです。
これで気兼ねなく眠れます。
本当に有難うございました。
0808nobodyさん
03/08/13 05:02ID:???> ということは、半角スペースはピリオドでは引っかからないと
> いうことですかね。これはこれで今ごろ知りました。やばい。
違うっしょ。
上の例の場合だと、 "\s*?" は最小一致になってるからゼロ文字にマッチして、
空白はその後ろの ".+?" に食べられてるでしょ。
0809nobodyさん
03/08/13 06:33ID:EIv2Ifoyttp://www.yahoo.co.jp/sports/matsui
とあったとします。
それでttp://www.yahoo.co.jpだけを抜き出すにはどうすればいいのですか?
いくらやってもうまくいかなくて。。
0810nobodyさん
03/08/13 07:15ID:???0811nobodyさん
03/08/13 18:17ID:???\sは「空白文字」ですよね?
なので空白文字以外は引っかからないと思うのですが、
いかがでしょう。
理解不足ですみません。
0815山崎 渉
03/08/15 22:34ID:???│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0816nobodyさん
03/08/16 05:13ID:0jlc9p4o例えば <font size=3>font</font> から「font」を検索する場合にfontタグは検索結果に含めないという意味です。
0817nobodyさん
03/08/16 06:07ID:s3eL1VQH0818nobodyさん
03/08/16 07:48ID:w5cGb34cstrip_tags()っていう関数があるけど
0819nobodyさん
03/08/18 02:08ID:BFUuzXu6ただし、最後のスラッシュはいらないです。
たとえば
/usr/local/apache/logs/access_log
このファイルだったら
/usr/local/apache/logs/ ← こうではなく
/usr/local/apache/logs ←このようにしたい
0821820
03/08/18 02:31ID:???の方が良いか。
0823nobodyさん
03/08/18 08:11ID:???.htaccessのRedirectMatchで正規表現を使い以下のような置き換えを
しようとしてるんですが、上手くいきません。アドバイスおながいします
hoge.com/diary/diary.cgi?d=20030818 をhoge.com/diary/?date=20030818
にしたいとき。
RedirectMatch diary\.cgi\?d=(.*)$ http://hoge.com/diary/?date=$1
?は\でエスケープできないのかなぁ。
例えば、
RedirectMatch diary\.cgi\_d=(.*)$
のように、?以外にするとひっかかるし。
あと、置き換え後の
http://hoge.com/diary/?date=$1
に関しては、? が %3f になってしまうのもよくわかりません。。
0824823
03/08/18 08:12ID:???(*)じゃなくって、(.*)ですた。スマソ
■ このスレッドは過去ログ倉庫に格納されています