正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/11/19 21:42ID:Kst3Nn4Sこのスレは有用そうな正規表現を紹介したり、どう表現したらいいかわからないときに質問をしたりするためのスレッドです。
質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。
註:& や " を書くときには、& " と描いておきましょうね。
Perlメモ
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
過去スレ
正規表現道場@2ch
http://pc.2ch.net/test/read.cgi/php/996105815/
正規表現道場@2ch Part2
http://pc2.2ch.net/test/read.cgi/php/1038146241/
0657nobodyさん
04/08/24 03:13ID:???>アフォでもなんでもいいですよ。
なんでもよくない。間違いなくお前はアフォだ。リアルに言うと知恵遅れ。
自分がアフォだとも気づかずに必死に勉強とかやってるのってなんか空しいな。
まずは自分がアフォだと認識して、具体的にどの能力が劣るのかを知りなさい。
これからは質問前に自分の疑問と、どうしたいかっていうことをきちんとまとめてから
ここにきて書きはじめなさい。急がば回れってね。質問前に遠回りしてもしっかりまとめれば
誰かがちゃんと答えてくれるよ。
0659nobodyさん
04/08/24 18:23ID:5aeoylmiその際に受信ボックスから、携帯メール(docomo ezweb vodafone)をフィルタリングマネージャで
別のフォルダ(フォルダ1と仮定)に振り分けたいのですが、
その中でも彼女のメールだけさらに別フォルダ(フォルダ2)にしたいと思ってます。
つまり、
" ***@docomo.ne.jp " " ***@ezweb.ne.jp " " ***@*.vodafone.ne.jp "から来たメールは
フォルダ1に振り分けたいが、もしそれが彼女のアドレスの場合はフォルダ2に振り分ける、
といった感じです。
どのように記述したらいいのでしょうか?
以下、Beckyヘルプより引用
下記の正規表現がサポートされています。
^行頭にマッチします。
$行末にマッチします。
X|YXまたはYにマッチします。(X,Yは正規表現です)
[A-Z]AからZまでの間の文字にマッチします。(A, Zは任意の文字)
[^A-Z]AからZまでに含まれない文字にマッチします。
[ABC]A,B,Cのいずれかの文字にマッチします。 (A,B,Cは任意の文字)
[^ABC]A,B,Cのいずれでもない文字にマッチします。
.任意の一文字にマッチします。
X*Xの0以上の繰り返しにマッチします。 (Xは正規表現)
X+Xの1以上の繰り返しにマッチします。 (Xは正規表現)
X?Xまたは空文字列にマッチします。
()で囲んだ正規表現は解釈の優先順位が高くなります。
0660nobodyさん
04/08/24 19:08ID:???漏れがメル友に(ry
0661nobodyさん
04/08/24 19:25ID:???Becky!のフィルタの仕様がわかんないけど、
^From:.*kanojo.kawaiiyo.kanojo → まず大事なメルを保護
^From:.*(どこも|あう|ぼだほん)\.ne\.jp → 残りのうち携帯メルを振り分け
(中略)
どれにも当てはまらないもの → ベタな inbox に落ちる
こんな仕組みじゃないのかな。
むしろ、こちらでどうぞ。
メールソフト Becky! Part9
http://pc5.2ch.net/test/read.cgi/software/1090377005/
0663nobodyさん
04/09/03 00:28ID:V2uWGL3lこれでテーブルタグの中にあるカンマだけ</td><td>に置き換えたいのです。
どんなもんでしょう。
0664nobodyさん
04/09/03 02:17ID:???Perl なら
s{(?<=<table>)(.+?)(?=</table>)}
{ (my $str = $1) =~ s|,|</td><td>|g; $str }eg;
0666663
04/09/03 08:46ID:???とりあえず解析後回しで突っ込んでみたら完璧でした。
もしかして<table>〜</table>が複数ブロックあるとダメかなと思ったけどOK。
なんか自分ではまったく考えられない構文だったのでちょっと絶望感。
とりあえず誰かの役に立てばと、作ってたルーチン晒します。
アウトライン指定を行頭ピリオドの数で、行頭カンマをテーブルと判断して
自動整形。
アウトラインはH1は掲示板タイトルに使うし、H2は記事タイトルに使うから、
H3からね。
$comment = &sanitize($comment,3);
$comment = "\x0A$comment\x0A";
$comment =~ s/\x0A+/<\/p><p>/g;
$comment =~ s/<p>\.\.\.\.([^<]*)<\/p>/<h6>$1<\/h6>/gi;
$comment =~ s/<p>\.\.\.([^<]*)<\/p>/<h5>$1<\/h5>/gi;
$comment =~ s/<p>\.\.([^<]*)<\/p>/<h4>$1<\/h4>/gi;
$comment =~ s/<p>\.([^<]*)<\/p>/<h3>$1<\/h3>/gi;
$comment =~ s/<p>,([^<]*)<\/p>/<tr><td>$1<\/td><\/tr>/gi;
$comment =~ s/<tr>[^,],<\/tr>/<\/td><td>/gi;
$comment =~ s/<\/p><tr>(.*?)<\/tr><p>/<\/p><table><tr>$1<\/tr><\/table><p>/gi;
$comment =~ s{(?<=<table>)(.+?)(?=</table>)}{ (my $str = $1) =~ s|,|</td><td>|g; $str }eg;
$comment =~ s/(s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/<a href="$1" target="_top">$1<\/a>/gi;
$comment = "<p>$comment</p>";
$comment =~ s/<p><\/p>//gi;
0667nobodyさん
04/09/03 16:41ID:XAO5vI6Oファイルネームがfoo.cgiに関するリンクをすべて洗い出したいとき、
どのように書けばよいのでしょうか?
/<A 〜〜foo.cgi.*?>/ig
という感じになると思うのですが〜〜の部分がよくわかりません。
ちなみに、href=をつけていないのは、改行がはいっていたり、classなどよけいなタグが入っていることがあるためです。
0668667
04/09/03 16:56ID:???/<A .*HREF=.*foo.cgi.*?>/ig
でよろしいようですね。
検索結果がタグになっていたんで、Web表示だとうまく見えていませんでした。
0669nobodyさん
04/09/03 17:52ID:???よろしいかどうかは君が相手にしているデータ次第なわけで。
$_ = <<'EOF';
<a class="TRAP" name="href">foo.cgi</a>
<a
href="foo.cgi" class="OK">OK</a>
<a class="OK" href="foo.cgi">OK</a><a href="foo.cgi" class="OK">OK</a>
<a class="OK" href="foo.cgi"
>OK</a>
<a href="fooocgi">TRAP</a>
<a href="bar.cgi?href=foo.cgi">TRAP</a>
<a hreflang="ja" name="fooocgi">TRAP</a>
EOF
print '[', join("]\n[", /<A .*HREF=.*foo.cgi.*?>/ig), "]\n";
print "---\n";
print '[', join("]\n[", /<a\b[^>]*?\shref=[^>?]*?foo\.cgi[^>]*>/ig), "]\n";
まぁ解決したようなのでこれ以上は突っ込まんでおく。
0670nobodyさん
04/09/05 17:08ID:VHVjccb7どのような方法ありますか?
aaaaaa aaaaa aaaaaaaaaaaaa aaaa aaaaa
|← ここです →|
0671nobodyさん
04/09/05 18:32ID:???空白を正規表現で何て書くか分かったら解決な。
0672nobodyさん
04/09/05 19:42ID:???スペースでexplodeしたほうがいいんじゃないの?
0675nobodyさん
04/09/07 09:23ID:Z5/Re9xzや
<a href="../test/read.php/bbs/0987654321/155" target="_blank">>>155</a>
xxxxxxxxxx.datから上記のようなアンカーリンクを>>10のようにしたい。
どなたかお願いします。
0676nobodyさん
04/09/07 09:24ID:Z5/Re9xzや
?a href="../test/read.php/bbs/0987654321/155" target="_blank">&gt;&gt;155</a>
xxxxxxxxxx.datから上記のようなアンカーリンクを>&gt;0のようにしたい。
どなたかお願いします。
0679nobodyさん
04/09/07 16:33ID:???スレ内アンカーのAタグを削除すればかなり効果があると睨んでいる。
専用ブラウザのためAタグが無くともポップアップするので困らないと思ったのだろう。
そしてアンカーを削除することに成功し、ポップアップしないことを確認し
今度は「それを元に戻す正規表現を教えて下さい」と質問しに来るのだ。
0680nobodyさん
04/09/07 17:22ID:???0682nobodyさん
04/09/07 17:49ID:???いいのか?
2chブラウザはアンカー自動でして無いと思うけど
dat直読みだろ。それでいいのか?
それなら簡単に消せるだろうが、なんに使うのか
0683nobodyさん
04/09/09 09:11ID:???「2ch」をアドレスに含まない「http」で始まるリンクにマッチさせることはできますか?
オートリンクで挿入されたリンクを対象にしています。
<a [^>]+(!?2ch)[^>]+>http
こんな感じかなあとやってみたのですが、出来ませんでした。
0684↑
04/09/09 09:13ID:???マッチする場所は問いません。
0686683
04/09/09 21:31ID:???$regexp = <STDIN>;
if($log =~ /$regexp/){
perlで上記のような感じになってるんで半分諦めていますが、
できるものなら高度な正規表現を使ってみたいと思った次第なのです。
Perl5.8.2で使える正規表現で何かいい表現はありますか?
0688683
04/09/10 10:46ID:???希望どおりにマッチしました。
[^>]を中に入れてしまえばよかったんですね。
あと ?! と !? 間違ってましたね。。。
ありがとうございました。
0689nobodyさん
04/09/13 00:58:55ID:???URLにマッチさせる際、正確に(https://とかにも)マッチするようにしたいのですが、
どうすれば一番簡潔に決められますか?
あと、メアドと電話番号のそれぞれをmailto:とteltoに置き換えたいのですが、どうすればよいか思い浮かびません。
英数@英数とかにすると電話番号@〇〇.ne.jpとかが判別できないので…
よろしくお願いしますm(_ _)m
0690nobodyさん
04/09/13 02:41:38ID:???URL: http://www.din.or.jp/~ohzaki/perl.htm#httpURL
メールアドレス: http://www.din.or.jp/~ohzaki/perl.htm#Mail
電話番号: >>594-602
0691???にマッチさせるには?
04/09/14 23:26:21ID:Kd7HVFLL$id =~ /ID:???/
とすると、エラーになりました。↓
Nested quantifiers in regex; marked by <-- HERE in m/ID:??? <-- HERE /
WindowsXPでActivePerlを使用しています。
0694691
04/09/14 23:56:41ID:Kd7HVFLLできました。ありがとうございました。
0695nobodyさん
04/09/19 15:59:53ID:???等幅のゴシックかなあ・・・。
0696nobodyさん
04/09/19 23:14:45ID:???http://pc5.2ch.net/test/read.cgi/tech/1032261438/
http://pc5.2ch.net/test/read.cgi/prog/1090997542/
0698nobodyさん
04/09/22 17:13:59ID:JesDYCu3あと、[email protected]みたいなメアドを電話番号と区別するにはどうすればよいでしょうか?
(電話番号はtel:メアドはmailto:にしたいのです)
よろしくお願いしますm(_ _)m
0699nobodyさん
04/09/22 17:46:51ID:???$'
> あと、[email protected]みたいなメアドを
> 電話番号と区別するにはどうすればよいでしょうか?
$`
0700nobodyさん
04/09/23 02:56:01ID:???0702nobodyさん
04/09/26 07:43:52ID:FGVvy0I6みたいなファイルネームの文字列から数字の部分だけを取り出して変数に代入したいんですが、どのようにすればいいんでしょうか?
0704nobodyさん
04/09/26 07:57:37ID:FGVvy0I60706nobodyさん
04/09/26 08:01:04ID:???> このスレは有用そうな正規表現を紹介したり、どう表現したらいいかわからないときに質問をしたりするためのスレッドです。
> 質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。
>>701も見てみろ
0707nobodyさん
04/09/26 08:04:00ID:???0708nobodyさん
04/09/26 08:04:27ID:FGVvy0I6>質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。
て書いてありますね。
使用言語はperlです。
0709nobodyさん
04/09/26 08:15:50ID:???> このスレって丸投げもOKになった?
> 701 名前:nobodyさん 投稿日:2004/09/23(木) 04:38 ID:???
> >>700
> 最初から OK だよ。
> 但し、丸投げとバレた時点でアウト、というルール。
ちょっとは自分で努力しなさい。
やった結果がうまく出来なかった場合、漏れたちがアドバイスをしよう。
0710nobodyさん
04/09/26 08:26:31ID:FGVvy0I6ファイル名を一文字ずつ分解して配列変数に入れて、一つずつ0-9に該当するか見ていって、該当したらスカラー変数に入れてくっつけていく。
いかにも効率がわるいですが、どうすればいいですか?
0711nobodyさん
04/09/26 08:28:13ID:???0712nobodyさん
04/09/26 08:31:49ID:???0713nobodyさん
04/09/26 08:33:31ID:FGVvy0I6ということで書き込みしてるわけですが。
0714nobodyさん
04/09/26 08:36:37ID:???ってループしてる…
0716nobodyさん
04/09/26 08:51:07ID:???0717nobodyさん
04/09/26 08:51:53ID:FGVvy0I6さっきから、誰に向かって、書いてるつもりなの?
こんな質問スレで、自分にだけわかる言葉でレスつけても仕方ないと思うんだけど、
まさしく>>715はバカの壁ってやつですね。
0718nobodyさん
04/09/26 08:54:57ID:???さーて釣り宣言まだかな
0719nobodyさん
04/09/26 08:57:36ID:FGVvy0I6残念。
0720nobodyさん
04/09/26 08:58:39ID:???0722あぼーん
NGNG0723nobodyさん
04/09/28 15:15:15ID:???キーワード処理に便利なんですが。
0726nobodyさん
04/09/29 02:49:00ID:???0727nobodyさん
04/10/01 01:34:03ID:???アルファベット等がどこかに含まれたらマッチしない表現を考えています。
言語はPerlです。
1
10
-10
0.101
100.1
-1000.01
桁数固定なら深く考えることもないのですが、上みたいなマイナスが入ったり小数点が動いたりする可能性を考えたらわからなくなってしまいました。
0728nobodyさん
04/10/01 14:00:54ID:???^-?[0-9]+(\.?[0-9]+|[0-9]*)$
0729nobodyさん
04/10/01 14:05:48ID:???しかし汚ねーなあ。たぶんググればまともなの出てくるよ。
0730nobodyさん
04/10/01 14:12:08ID:???数字の読み方としてはそれもありだが、正規表現的にはコレで十分
/-?[0-9]+(\.?[0-9]+)?/
8進数マッチするけどいいんだよね
0731nobodyさん
04/10/01 14:13:33ID:???/-?[0-9]+(\.[0-9]+)?/
0732nobodyさん
04/10/01 14:19:08ID:FcpwUMKG0733nobodyさん
04/10/01 14:56:15ID:???.5 とかもあるだろ?
0734nobodyさん
04/10/01 15:02:38ID:???0736nobodyさん
04/10/01 15:08:12ID:???>>727が判断することだけど。
# Perlスレでは確か「n進数や指数はどうよ?」でブームが終わったような。
0737733
04/10/01 15:10:26ID:???/^-?\d*(?:\.?\d+)?$/
0738nobodyさん
04/10/01 15:11:04ID:???http://2chart.fc2web.com/2chart/igawa.html
0740733
04/10/01 15:12:51ID:???0741nobodyさん
04/10/01 15:14:01ID:???0742nobodyさん
04/10/01 17:19:34ID:???0743727
04/10/01 21:36:43ID:???いくつもありがとうございます。
>>733
.5のような表記は無しです。
試してみたところ>>729 >>742が目的にあった動作をするようなので使ってみます。
みんな良く調べて何が違うのが勉強してみます。
正規表現、便利だけど難しいですね
0744nobodyさん
04/10/02 16:22:06ID:???'\1<a href="keyword.php?q=\2">\2</a>\3', ' ' . $mes);
こうやって、URLの可能性がないアルファベットの連続をキーワードとしてリンクさせたいのですが、
これだとスペース置きにキーワードが並んだ場合、どちらかしか replace されません。
MSN Messenger など MSN と Messenger 両方にマッチさせたいのですが、
何か良い方法はありませんでしょうか。
0745nobodyさん
04/10/03 02:24:24ID:???'<a href="keyword.php?q=\1">\1</a>', ' ' . $mes)
とりあえず、これでいいと思う。
自分はURLを「http:」で始まる単語としたくて、
(?<!http:)([^\s]{2,})
でやってみたけど、
[^\s]が全部取っちゃうようでうまくいかなかったorz
0746nobodyさん
04/10/03 02:25:54ID:???×((?=[^[:graph:]])|$)) ○((?=[^[:graph:]])|$)
0747744
04/10/03 04:57:52ID:???回答ありがとうございます。
XREA を利用しているので PHP の 4.3.8 を利用しているのですが、
Warning: ereg_replace(): REG_BADRPT が出てしまいました
(いろいろ試したみたところ、 (?= に反応しているようでした)。
preg mb_ereg でも同様のコードを試してみたところ (?= はパスするものの
ereg と違って [:graph:] に日本語がマッチしてしまうようです(こっちが正しいのかな?)。
745のコードを参考に mb_ereg で以下のように書き直してみたところなんとか動作しました。
$mes = mb_ereg_replace('([a-zA-Z.]{2,})((?=[^a-zA-Z0-9<>":;.,/=?+_&@\-])|$)',
'<a href="keyword.php?q=\1">\1</a>', $mes);
よくわからないのですが、[:alpha:]を使うと漢字にマッチしたりして挙動が変になっていました。
うーん、まだまだ勉強が必要です。
0748nobodyさん
04/10/03 05:14:58ID:???0749nobodyさん
04/10/03 05:29:07ID:???例によって>>1の正規表現メモんとこ参照すると分かりやすい。
0750nobodyさん
04/10/03 22:20:30ID:???あるシステムの独自タグをあつかっています。
<XXXX Name = Test1 number = 1 value1 = "テスト" value2 = "テスト\"ああ\"" value3="テスト3 \t test">
</XXXX>
という具合に、<XXXX で始まるタグの中にかかれた各属性と値をそれぞれ分割したいのです。最初、Javaプログラムで頑張って書いていましたが、
へたれな自分のプログラムが長くなってしまいバグも所々に…。くせものが属性と値の表記で、valueというキーの値がaaaa としても、
value = aaaa の場合
value = "aaaa" の場合で異なる値にしたい(" がポイント)
value=aaaa や、途中で改行やタブが入る、
value=
aaaa
といった場合もあります。
値の中に、ダブルクォーテーションが入る場合やスペースが入った場合を考慮してJavaプログラムで何とかしようと思ってましたがスパゲッティ状態です。
正規表現でエイヤっと属性名と値で分割させたいのですが、、、>>1のサンプルをあさってますが、もし、何か良いモノ知っていましたら教えてください。
0751750
04/10/03 22:21:42ID:au5XkXk90752nobodyさん
04/10/04 01:59:41ID:???その独自タグの仕様をはっきりさせなければ誰もわからんよ。
「=」の隣にスペースが入っていたりダブルクォートでくくっていたり
いなかったりしてるし。
0753nobodyさん
04/10/04 02:00:16ID:???/(.+?)[\n\s]*=[\n\s]*("(\\"|[^"])+"|[^\s]+)(?:[\n\s]+|$)/; #$1=属性, $2=値
やっとできた・・・。
\"を含める方法とか、勉強になりました。
0754753
04/10/04 02:10:49ID:???そうだ、
>value = aaaa の場合
>value = "aaaa" の場合で異なる値にしたい(" がポイント)
これがどういう結果を望んでいるのか分からないままやってたw
とりあえず、ダブルクォートは残す仕様にしておいたけど。
0755750
04/10/04 07:43:16ID:3m/jnQ5F>>752にあるように、= の両隣は、スペースが入ったり、入らなかったりします。厳密にはJavaでいうところのホワイトスペースを許可してて、タブとか全角スペースなどもありです。ここは許可しないことを改善してもらうつもりです。
あとで結果報告しますね。ありがとう〜
0756nobodyさん
04/10/04 11:31:31ID:???みんなが使ってるフォーマット (XML ね) にしてもらうようにした方が良いと思う。
■ このスレッドは過去ログ倉庫に格納されています