正規表現道場@2ch Part4
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
05/01/17 11:51:25ID:SH1ygN1Pこのスレは有用そうな正規表現を紹介したり、
どう表現したらいいかわからないときに質問をしたりするためのスレッドです。
質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。
註:& や " を書くときには、& " と描いておきましょうね。
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/
正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g
http://pc5.2ch.net/test/read.cgi/php/1069245758/
0730nobodyさん
NGNG0731nobodyさん
2005/09/30(金) 21:38:59ID:???というのは、それ自体が一種の偏見だな。
0732nobodyさん
2005/09/30(金) 21:42:20ID:???なるほど、>>726とかは、正確な知識等に基づいて、精神障害者をあげつらってるわけね。
そりゃすばらしい。
0735nobodyさん
2005/10/02(日) 15:27:27ID:???難しいね。
0736nobodyさん
2005/10/03(月) 01:28:44ID:???4.2.1 例題について
そのためツールによっては、
示したもをサポートしていないものもある。
他にもいくつかミスがあったはず。
正規表現を扱う人はミスを見逃さない人ばっかりだと思ってました。
0737nobodyさん
2005/10/03(月) 02:57:56ID:???0741nobodyさん
2005/10/06(木) 15:28:34ID:???$xxxregexp = "%<TD WIDTH=\"448\" VALIGN=\"TOP\"><A href=\"(.+?)\">\n(.+?)\n<\/A>%";
$match_count = preg_match_all($xxxregexp, $data, $xxxs);
xxxregexpの二つめのグループ内を抽出して出力したいのですが、マッチしないようです。
二つめのグループで抽出するのは日本語なのですが、この場合どのように記述すれば正しいのでしょうか
0742nobodyさん
2005/10/06(木) 15:55:05ID:???$data = '%<TD WIDTH="448" VALIGN="TOP"><A href="foo">
ほげほげ
</A>%';
$xxxregexp = "%<TD WIDTH=\"448\" VALIGN=\"TOP\"><A href=\"(.+?)\">\n(.+?)\n</A>%";
$match_count = preg_match_all($xxxregexp, $data, $xxxs);
print($xxxs[2][0]);
0743nobodyさん
2005/10/06(木) 17:29:47ID:???もう少し考えてみます
0744nobodyさん
2005/10/06(木) 19:45:05ID:???\n じゃなくて \r\n とか \r?\n にしてみたら?
0745nobodyさん
2005/10/06(木) 20:23:02ID:???ありがとうございます orz
0746nobodyさん
2005/10/08(土) 03:47:34ID:???NOff または Noff
という文字列を正規表現で検索させる場合は
[N][Oo](n|ff)
こんな感じじゃ駄目なんですかね?
0747nobodyさん
2005/10/08(土) 05:16:33ID:???N[Oo](n|ff)
0748nobodyさん
2005/10/09(日) 11:51:52ID:???gfgfgfgfff
みたいに10桁の二つの文字列にマッチするにはどうしたらいいでつか?
0749nobodyさん
2005/10/09(日) 12:33:11ID:???不定の2種類の文字で構成されているってことだろうから
^(.)(\1*)(.)(\1|\3)*$
ただしこれは10文字以外でもマッチするからそれも入れるなら面倒そうだ
0751nobodyさん
2005/10/09(日) 16:01:03ID:???jpg以外が混じってるとうまくいきません。
どうすればいいのでしょうか?
/<img\s.*?src="(.*?\.jpg)".*?>/i
<img SRC="test_01.gif" />
<IMG src="test_02.jpg" border="0">
<img alt="test" src="test_03.jpg" />
0752nobodyさん
2005/10/09(日) 16:04:35ID:???0753nobodyさん
2005/10/09(日) 16:15:18ID:???/<img\s.*?src="(.*?\.jpg)".*?>/i だと、
【<img SRC="test_01.gif" /><IMG src="test_02.jpg" border="0">】
↑みたいに余計な部分を含んでマッチしてしまいます。
↓だけマッチするようにしたいのですが、、
【<IMG src="test_02.jpg" border="0">】
0754nobodyさん
2005/10/09(日) 16:19:18ID:???0756nobodyさん
2005/10/11(火) 13:37:02ID:???↑こちらに 「入れ子を許した括弧内にマッチさせる」 正規表現が載ってるんですが、
残念ながら perl5.5 以前では (??{〜}) の書きかたがサポートされていません。
その場合、どのように書けばいいでしょうか? 数行に渡ってもいいです。
0757nobodyさん
2005/10/11(火) 14:54:34ID:???0758nobodyさん
2005/10/11(火) 15:03:55ID:???「数行」 ってのは正規表現以外の処理入ってもよくて、例えば、
my $string = 'aa {bb} cc { dd {ee} } ff { gg { hh { ii { jj } kk } ll } mm } nn';
1 while ($string =~ s/(\{(?>[^{}]*))\{((?>[^\}]*))\}/$1\x11$2\x12/); # 中のカッコを一旦escape
while ($string =~ /(\{[^{}]*\})/g) {
local $_ = $1;
tr/\x11\x12/{}/; # 中のカッコをunescape
print $_, "\n";
}
これより上手い方法思いついたら教えてほしいのですr
0759nobodyさん
2005/10/11(火) 15:59:26ID:???正規表現以外の処理を前提にするなら、それは正規表現スレで
する質問では無くなるよな。各言語のスレへお行き。
0760nobodyさん
2005/10/11(火) 16:07:28ID:???いや、そりゃそうなんだけど、
もっとうまい正規表現があるかと思って疑問に思った核が正規表現の部分なんだから、このスレでいいかと思ったんだけどな。
perl板に行っても正規表現スレに行けって言われるのがオチなので、ダメなら諦めるわ。
0761nobodyさん
2005/10/11(火) 16:16:08ID:???そんなことはないと思うけどなあ。
Perl でのアルゴリズムの話でもあると思うので、
厶板 Perl スレあたりで聞いてみるのもアリかと。
0762nobodyさん
2005/10/11(火) 17:17:22ID:???0763nobodyさん
2005/10/11(火) 18:33:57ID:???詳しく!
0764nobodyさん
2005/10/12(水) 22:20:33ID:enZtkyi2現在はこんな感じで書いていますが「ー」などを弾いてしまうので困っています。
if( !preg_match("/[0-9\x\-\x(\x)\x[\x\]\x<\x>\x?\x\/\x\.\x\+\x\*\x_\x!\x#\x\$\x%\x~\x\|\x\@\x;\x,\x`\x{\x}]/", $R_um_name1) ){
$ERROR=$ERROR.'エラー<br>'."\n";
}
0765nobodyさん
2005/10/12(水) 22:23:30ID:???http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm
0767nobodyさん
2005/10/13(木) 00:27:53ID:???現在、「.dat<>」と「 (」で分割してるのですが、
0000000000.dat<>スレッドタイトル (レス数)
という形式だけでなく、スレ数の括弧が全角だったりするところもありますorz
誰か教えてください
0768nobodyさん
2005/10/13(木) 00:56:37ID:???.ノ′ } 〕 ,ノ .゙'┬′ .,ノ
ノ } ゙l、 」′ .,/′ .,ノ _,,y
.,v─ーv_ 〕 〕 .| .il゙ 《 ._ .,,l(ノ^ノ
,i(厂 _,,,从vy .,i「 .》;ト-v,|l′ _,ノ゙|.ミ,.゙'=,/┴y/
l ,zll^゙″ ゙ミ .ノ .il|′アll! .>‐〕 \ _><
《 il|′ フーv,_ .,i″ ||}ーvrリ、 ¨'‐.` {
\《 ヽ .゙li ._¨''ーv,,_ .》′ ゙゙ミ| ,r′ }
\ ,゙r_ lア' .゙⌒>-vzト .ミノ′ 〕
.゙'=ミ:┐ .「 ./ .^〃 :、_ リ .}
゙\ア' .-- ,,ノ| 、 ゙ミ} :ト
゙^ー、,,,¨ - ''¨.─ :!., リ ノ
〔^ー-v、,,,_,: i゙「 } .,l゙
l! .´゙フ'ーv .,y ] '゙ミ
| ,/゙ .ミ;.´.‐ .] ミ,
| ノ′ ヽ 〔 ミ
} } ′ } {
.| .ミ .< 〔 〕
.{ \,_ _》、 .{ .}
{ ¨^^¨′¨'ー-v-r《 〔
0769nobodyさん
2005/10/13(木) 10:37:30ID:???ココは正規表現スレです。詳しい仕様がなければ回答しません。
貴方は調べるのを面倒に感じて投げ出したのに、我々に資料集めからやれと仰るのでしょうか?
オープンソースな2chブラウザのコードを見るという手もありますが、それはこのスレの範疇にありません。
具体的な仕様の提示・スレの移動 の何れかを選択してください。
0770nobodyさん
2005/10/13(木) 12:20:37ID:4gxpiBDK立派なモノをお持ちですねw
0772nobodyさん
2005/10/13(木) 14:40:34ID:???2ch の仕様は、なにはともあれまずは monazilla.org(w の資料室を調べてみれ。
それ見てまたわかんないことがあったら、
どこまで頑張ってみたかコードを示してまたおいで。
http://www.monazilla.org/
http://www.monazilla.org/document/subjecttxt2001.html
0773nobodyさん
2005/10/13(木) 15:13:39ID:???foreach($tmp as $value) {
$tmp = split("<>", $value);
if($tmp[0]) {
$thread['key'] = $tmp[0];
list($thread['name'], $thread['res']) = split(" \(", $tmp[1]);
list($thread['key'], $tmp) = split(".dat", $thread['key']);
list($thread['res'], $tmp) = split(")", $thread['res']);
printf("\n<TR><TD><A href=\"%d\">%d</A></TD><TD>%s</TD><TD>%s</TD></TR>", $thread['key'], $thread['key'], $thread['name'], $thread['res']);
}
}
現在は、試行錯誤を繰り返しながら分割でやっているのですが、「 (」がタイトルにあると失敗します。
0774773
2005/10/13(木) 15:32:40ID:???$tmp = preg_match("/^([0-9]+)\.dat(<>|,)(.*) (\(|(|<)([0-9]+)(\)|)|>)$/", $tmp, $match);
でいいのかな・・・
111111111.dat<>テスト (実験用) (2) Part2 (100)
↓
Array
(
[0] => 111111111.dat<>テスト (実験用) (2) Part2 (100)
[1] => 111111111
[2] => <>
[3] => テスト (実験用) (2) Part2
[4] => (
[5] => 100
[6] => )
)
0776Jeffrey E.Friedl
2005/10/15(土) 20:57:56ID:???0777nobodyさん
2005/10/15(土) 21:49:52ID:???0780nobodyさん
2005/10/28(金) 06:06:55ID:???vbsで2ちゃんのidxファイル内のスレ数が抽出できません。
(\t)\8[^(\t)](\t)\9
0781nobodyさん
2005/11/06(日) 23:27:29ID:???0782nobodyさん
2005/11/08(火) 22:59:53ID:???grepで、ファイルから行を抽出したいんですが、
文字列1か、文字列2のどちらかを含む行の条件の指定って
どのように書けばよろしいのでしょうか?
0784nobodyさん
2005/11/08(火) 23:11:09ID:???\(文字列1|文字列2\)
でした
0785782
2005/11/09(水) 09:49:48ID:???レスありがとうございます。
早速試してみたのですが、どうもうまくいきません。
>>783だとsyntax errorで、
>>784だと、
grep \(s1|s2\) file だと、パイプの前後で別のコマンドとして扱われ、
s2):comannd not foundになってしまいます。
環境はCygwinなんですが・・・
0786nobodyさん
2005/11/09(水) 12:15:36ID:???言語はPHPです。
出力直前にHTMLを一括で変換しようと思っているのですが、
元のHTMLが汚く、以下のように書き方がバラバラで困っています・・・
<img src="/lib/aaa.gif">
<img src=/lib/aaa.gif> ← ダブルクォーテーションなし
<img src='/lib/aaa.gif'> ← シングルクォーテーション
<img src=lib/aaa.gif> ← 最初のスラッシュなし
0787nobodyさん
2005/11/09(水) 14:44:34ID:???まず元の HTML の書式を統一させるように変換をかけてから、パスの変換をかけるといいかも。
あるいは元の HTML 自体をあらかじめ直しておくか。
いずれにせよ、一発で全部やるのは効率悪いと思う。
0788nobodyさん
2005/11/09(水) 15:29:52ID:???([0-9][=+]?)
が64個並んでいます。
マッチした()の中身を出力するためなのですが、
([0-8][=+]?){64}
ではダメでした。
何かいい方法はあるんでしょうか?
0789788
2005/11/09(水) 15:42:44ID:???ページパスと相対パスで、絶対パスを出力する関数作って、
そこに切り出してきた相対パスを放り込む作戦はやったことがある。
>>788
下側は ([0-9][=+]?){64} の間違い。
0792nobodyさん
2005/11/09(水) 20:45:26ID:ySyrfo3jphpなんですが
$url = "http://www.hoge.com/です。http://www.ho-ge.com/もよろしく!";
$url = ereg_replace( "(http://[[:alnum:]\S!#\$%&=-~@;\+:\*,\./\?_]+)", "<a href='\\1' target='_blank'>\\1</a>", $url );
とすると、-が正規表現の対象から外れているんですがなにが悪いんでしょうか?
0794nobodyさん
2005/11/09(水) 20:50:57ID:???あと、あげてすみませんでした。
0795nobodyさん
2005/11/09(水) 20:51:31ID:???0796nobodyさん
2005/11/09(水) 22:59:58ID:???ASCII コードで '\' から '~' までの範囲の意味になっちゃうからかな。
>>794 みたいに文字クラスの先頭 (もしくは最後) に盛ってくるのが無難な希ガス。
0797nobodyさん
2005/11/10(木) 00:09:07ID:???0798nobodyさん
2005/11/10(木) 01:27:42ID:???0799nobodyさん
2005/11/10(木) 19:39:04ID:???@より後ろの文字列を取得したい場合の正規表現を教えてくださいませ
(この例の場合、def.ghiを取得したいです)
0800nobodyさん
2005/11/10(木) 20:20:35ID:???0801nobodyさん
2005/11/10(木) 20:47:37ID:???>>799
def.ghi
二度と書き込むな、クズ
0802nobodyさん
2005/11/10(木) 23:17:22ID:???入門者はそれなりの覚悟を持って欲しい。
0804nobodyさん
2005/11/11(金) 13:03:02ID:BiZLdrp5はじめの11月11日だ毛を取りたいです。
月=>11, 日=>11
教えてくださいませーーー
0807nobodyさん
2005/11/13(日) 03:51:30ID:0sDXu6D3123月0日
にもマッチしちゃうじゃん
0808nobodyさん
2005/11/13(日) 04:36:28ID:???0809nobodyさん
2005/11/16(水) 02:15:16ID:S0o67+2ohtmlから正規表現を使って一部分を取得したいのですがちょっと引っかかってます。
言語はPHPなんですがperl等でも理解はできるので宜しくお願いします。
簡単に言うと、例えば・・・
$source = "<a href=ttp://aaa.com/>あああ</a>";
と文字列があるとして URLと表示部分を取得するには現在は以下のようにしています。
// = の次から > を含まない全角を含んだ全ての文字が連続する物を取得
// > の次から < を含まない全角を含んだ全ての文字が連続する物を取得
mb_eregi("<a href=((?:(?!>).)*)>((?:(?!<).)*)</a>",$source,$reg);
これで
$reg[1] = "ttp://aaa.com/"
$reg[2] = "あああ"
上記のように取得できたんですが
$source = "<a href=ttp://aaa.com/>あああ</a><a href=ttp://ccc.com/>bbb</a>";
こんなふうに、ヒットする物が繰り返される場合
最初の "ttp://aaa.com/" と "あああ" しか取得できず
次に有る "ttp://ccc.com/" と "ddd" は無視されてしまいます
aタグは複数連なっており、全てではなく場合によって n 個目を取得したいです。
n回目にヒットした物や、次にヒットした物、を得る方法は無いでしょうか?
正規表現で何とかなる問題なのかどうかも解りません。
do while とか使わないと出来ないんでしょうか・・・
※ mb_eregi() は、大文字小文字を区別しないマルチバイト対応な関数です
0810nobodyさん
2005/11/16(水) 04:25:06ID:???欲張りじゃない繰り返しを覚える。
mb_eregi("<a href=((?:(?!>).)*?)>((?:(?!<).)*?)</a>",$source,$reg);
少し洗練。
mb_eregi("<a href=([^>]*?)>([^<]*?)</a>",$source,$reg);
0811nobodyさん
2005/11/16(水) 07:04:27ID:???0812nobodyさん
2005/11/16(水) 10:33:34ID:???有り難うございました><
0813nobodyさん
2005/11/20(日) 21:30:03ID:E/P1aLNd0814nobodyさん
2005/11/25(金) 11:16:59ID:t2pzoEwO正規表現でチェックするプログラムがあったのですが、
プログラム書いた人がもういなくてわかりません。
^([\w\.\-]+)@([\w\.\-]+)$
とかかれてました。
\wはわかるとして、「\.」、「\-」の意味がわかりませんでした。
エスケープ文字なのでしょうか?
でももしそうだとしたら、「[email protected]」
と入力してはじかれてしまうので、そういう意味ではないような気がします。
どなたか教えてもらえないでしょうか?
0815nobodyさん
2005/11/25(金) 11:30:49ID:???0816nobodyさん
2005/11/25(金) 11:57:05ID:???そのものの意味なんですね、ありがとうございます。
…ということはいけるはず…ということはプログラムがまずいのか…
0817nobodyさん
2005/11/26(土) 01:23:13ID:l7a43yMv.@.
こんな文字列にもマッチするのですが・・・
0819nobodyさん
2005/11/26(土) 15:30:09ID:???んなことないっしょ。
2バイト文字や空白や記号みたいにあからさまに不正な文字ははじけるし、
あと、後方参照用にグルーピングしてるみたいから、
チェックだけが目的じゃなさそうだし。
0820nobodyさん
2005/11/26(土) 15:48:49ID:RIen9muBなにかいい案ありませんか?
よろしくおねがいします。
0821nobodyさん
2005/11/26(土) 15:51:10ID:???0822nobodyさん
2005/11/26(土) 15:56:35ID:RIen9muB言語は一応Javaでやりたいのですけど・・
0823nobodyさん
2005/11/26(土) 16:57:57ID:???0824nobodyさん
2005/11/26(土) 16:59:12ID:RIen9muB0825nobodyさん
2005/11/26(土) 17:29:33ID:???それを読んでみてはいかが。
0826nobodyさん
2005/11/27(日) 01:17:00ID:mxeBXpTzずいぶん前から持ってます。
板違いみたいなので
どっか他のとこ逝ってきます。
ありがとうございました。
0827nobodyさん
2005/11/27(日) 03:00:37ID:2DsEIeioってもうちょっとかっこよくかけない?
0829nobodyさん
2005/11/27(日) 03:15:49ID:???■ このスレッドは過去ログ倉庫に格納されています