正規表現道場@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/
0683nobodyさん
2005/09/19(月) 17:50:19ID:???表現のなかに ' やら " が出て来た場合面倒杉。
0684nobodyさん
2005/09/19(月) 18:50:05ID:XLGKZohV含まれたものをヒットさせたいのだが、うまくいかない。
$line =~ /『.*?か.*?』/g;
だと、例2のような間に』と『あるやつも引っかかってしまうのだが・・・・・・・わかる人お願い。
例1 $line = "あいうえお『かき』くけこさし『すせ』そ"; →○
例2 $line = "あい『うえお』かき『くけ』こさしすせそ"; →×
0685nobodyさん
2005/09/19(月) 18:54:01ID:???0688nobodyさん
2005/09/19(月) 21:40:28ID:???こういうのよく見るけど、
$pattern を用意して、preg_replace() かける時に
わざわざ再度ダブルクォートで囲うのって
個人的にはちょっと…怖いかも。
副作用がありそうで。
0689nobodyさん
2005/09/20(火) 23:16:09ID:???ただし、"で囲まれた文字列はスペースで分割しない
ということをやりたいんだけど、これって正規表現で
うまくできる?
例:
dir "c:\abc def" ghi jkl
dir
c:\abc def
ghi
jkl
こんな感じに分割したいです。
0690nobodyさん
2005/09/20(火) 23:38:25ID:pDhdrwjA0691nobodyさん
2005/09/21(水) 20:40:37ID:???VK_C, 57634, NOINVERT, CONTROL, VIRTKEY
VK_BACK, 57643, NOINVERT, ALT, VIRTKEY
VK_F6, 57681, NOINVERT, SHIFT, VIRTKEY
VK_Z, 57643, NOINVERT, CONTROL, VIRTKEY
これを1 or 2回の置換で下のように編集できるでしょうか?
CONTROL C, 57634
ALT BACK, 57643
SHIFT F6, 57681
CONTROL Z,57643
秀丸つかってるんですが、タグつき正規表現に関する知識足りず、
ノーマル置換とExcelでまかなっている現状です。
0692nobodyさん
2005/09/21(水) 22:26:39ID:???VK_([^,]+),\s+(\d+),\s+[^,]+,\s+([^,]+).*$ → \3 \1, \2
で駄目なの?
0694nobodyさん
2005/09/22(木) 08:50:22ID:???ありがとうございます。ただ少し手直し必要だったので、一応のせておきます。
検索 VK_\f[A-Z0-9]+, [0-9]{5}\f, [A-Z]+, \f[A-Z]+\f,.+
置換 \3 \1
でも意味はあまり理解してません。
0695nobodyさん
2005/09/23(金) 23:27:20ID:???Vn →Vn/2
例
@1 →@0
V127 →V63 V63→V31 V31→V15
というように、@とVに続く数値をそれぞれ「-1」、「1/2」になるように処理したいのですが、
どのような正規表現を記述すれば良いでしょうか?
0696695
2005/09/23(金) 23:28:24ID:???@n →@n+1
例
@0 →@1
の誤りでした。
0697nobodyさん
2005/09/24(土) 01:32:55ID:???$1eval($2/2)
0698nobodyさん
2005/09/24(土) 01:41:34ID:PQeiuh7H$valに含まれる"a"全てを"ab"に置換する
$val = "aaa";
$val =~ s/a/ab/g;
print "Content-type: text/html\n\n";
print "$val";
/gというのは繰り返しということですが、
どのような繰り返しなのか理解できていません
1.置換前$valを把握し、参照するというような形で文字を繰り返し置換する
出力結果 ababab
2.毎回$valの最初から繰り返し置換していくので
置換後の"ab"にも"a"が含まれているので永久ループになる
出力結果 aaaaa.......................... (永久に終らず)
1を望んでいるのですが2だった場合が怖くて試せません
実際はどのような結果になるのでしょうか?
もし2だった場合は実際どのように記述すればいいのかご教授してくれると助かります
0699nobodyさん
2005/09/24(土) 01:55:09ID:???まず最初の "a" に /a/ がマッチして "ab" に置換したら、
次は $val 中の次の文字 (2文字目の "a") から /a/ のマッチを開始する。
というのを繰り返すので、 2. にはならないから安心しる。
2. だったら怖くて誰も /g を使いたがらない罠。
0700nobodyさん
2005/09/24(土) 02:02:00ID:PQeiuh7H>>699
永久にはならないのですね、安心しました
これでまたいろいろ試せそうです
早い解答どうもありがとうです
0701695
2005/09/24(土) 03:26:00ID:???すみません、これFlexRenamerなどで置き換えリストを作る場合、
ファイル名置換指定: $1eval($2+1) or $1eval($2/2)
にするとして、
ファイル名検索指定: の文字列はどのように入れればいいんでしょう?
0702695
2005/09/24(土) 03:43:59ID:???@に続く数値
Vに続く数値
に特化して計算処理をさせたい次第です。
@、V 以外に続く数値(TやOなど)もテキストファイル中に含まれるのですが、
それらの数値はそのままにしておきたいのです。
0703nobodyさん
2005/09/24(土) 23:07:27ID:???> すみません、これFlexRenamerなどで置き換えリストを作る場合、
おいおい、どんな言語やソフトを使ってるかは先に言えっつーの。
で、 Flexible Renamer ってのを見てみたけど、
ファイル名置換指定で -1 とか 1/2 とかいった演算はできないみたいね。
何か適当なスクリプト言語か何かで処理した方が良さそう。
0704nobodyさん
2005/09/25(日) 21:10:04ID:???メールじゃなくても郵便でもいいや。
0705nobodyさん
2005/09/25(日) 23:03:33ID:???0706nobodyさん
2005/09/26(月) 00:12:31ID:???0707nobodyさん
2005/09/26(月) 00:15:01ID:???0708nobodyさん
2005/09/26(月) 01:14:20ID:AIxnVq6mどうしてもうまくいきません。どう書けばいいでしょうか。
やりたいこと
<HTML>で始まり、<!--ここまで-->で終わる部分を削除する。
この区間に含まれる文字や文字数は不定、日本語アリ。複数行。
書いてみてダメだった表現
<html>.*--ここまで--> ←処理されない
.*--ここまで--> ←<html>からの処理ではない。<!--ここまで-->のある行だけ削ったようだ
<html>[\s\S].*<!--ここまで--> ←処理されない
Perlメモとか読んでみましたが、・・・ごめんなさい見方がわからない(というか理解が?)
このソフトについているリファレンスを見てやってます。
0709708
2005/09/26(月) 01:27:01ID:???<HTML>
<head>
<meta http-equiv=Content-Type content=text/html; charset=Shift_JIS>
<title>test</title>
</head>
<body bgcolor="#000000">hogehoge<!--ここまで-->
test</body></html>
0710nobodyさん
2005/09/26(月) 02:04:56ID:???0712nobodyさん
2005/09/26(月) 10:50:59ID:???<A HREF=http://www.2ch.net/ TARGET="_top">2chの入り口</A><br>
<A HREF=http://info.2ch.net/guide/>2ch総合案内</A>
・・・・(ry
このような2chのメニューから、板のURLと板の名前の二つを取り出したいのですが、
うまくいきません。
自分で書いたのは、/<A HREF=(\S*?)\s?.*?>(.*?)<\/A>/ です。
0713nobodyさん
2005/09/26(月) 15:11:05ID:???そのソフトは大文字小文字無視という設定無いみたいね。BBSでやっと見つけた。
>>712
最短マッチを否定の最長マッチに置き換える手があるよ
/<A HREF=([^ >]+)[^>]*>([^<]+)<\/A>/
0714nobodyさん
2005/09/26(月) 15:59:19ID:???0716nobodyさん
2005/09/26(月) 19:11:50ID:???0719708
2005/09/26(月) 22:12:35ID:???オプションは「マルチラインモード」っていうのがありますが
マッチしてないです。
・・・って、
>>711
できました。ありがとう(T△T)
0720711
2005/09/26(月) 22:26:07ID:???そうそう。探したんだけど見つからなかった。
もし大文字でも小文字でも動くようにするなら、めんどくさいけどこうかな。
<[Hh][Tt][Mm][Ll]>[\S\s]+<!--ここまで-->
>>719
ドキュメントを見る限りだと、「マルチラインモード」は、
^ (行頭) と $ (行末) の処理にしか反映しないっぽいのよね。
0721nobodyさん
2005/09/30(金) 02:58:44ID:???彼女が医療関係の学校に通ってるんだが、実習か何かで精神
障害者の施設へ行ったそうなんだ。それが終わって会った時に、
単なる会話として「大変だった?」とか訊いてたら、「あなたと同じ
本を読んでる患者がいた」って言うんだよ。隠してあったエロ本が
見つかったのかと動揺してたら、「あれだよ、表紙に動物の絵が
書いてあるコンピュータの」って言うから、オライリーのを順番に
見せていったら「それそれ! フクロウのやつ」だって。
施設の人が言うには、その患者は絶対にその本を手放さないし、
取り上げると錯乱するからずっと持たせてあるんだってさ。
0722nobodyさん
2005/09/30(金) 04:41:15ID:???よっぽど正規表現が好きな人だったんだな・・彼(彼女)に足を向けて寝れない。福岡から見た方角を教えてくれw
0724nobodyさん
2005/09/30(金) 17:14:30ID:???ヒトの不幸は密の味ですな。
0725nobodyさん
2005/09/30(金) 17:58:49ID:???本を抱えているからといって中身を理解しているとは限らないわけで
単純に絵が気に入っているのかもしれない。
0726721
2005/09/30(金) 19:21:05ID:???いやいやw、みんなも気をつけてくれと言いたかった。
マッチがどうしてもうまくいかない時は、精神的にも
肉体的にも参ってしまうことがあるだろう?
>>725
SEとかそういった職業に就いていたことは聞いたそう。
当然ながら施設の人は(医師さえも)、「正規表現」が
何なのかも知らないわけで、彼の話を理解してくれる
相手がいないとなるといい環境ではないなと。
ひょっとしたら正規表現でしかコミュニケートできなく
なってるんじゃないか、紙と鉛筆を渡せば正規表現で
意思表示してくれるんじゃないか、などと妄想してみた。
0727nobodyさん
2005/09/30(金) 20:31:46ID:???時間は人より掛かったけど旧帝大の電子工学科卒業してるし、情報処理の資格も持ってる。
が、本業はソフト屋じゃ無く、ハードの設計開発してる。
精神科に入院した事もあるし(2度)、今の会社もそんな事も理解した上で採用してくれた。
君らが、どんだけ精神障害者に偏見持ってるのか、あるいは無知なのかはしらないが、
『こんな風にあげつらって、楽しいのか?』
0728nobodyさん
2005/09/30(金) 20:53:55ID:???世の中にはいろんな人がいるんだよね。
0729nobodyさん
2005/09/30(金) 20:56:58ID:???このへんでもういい加減やめれ。
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のどちらかを含む行の条件の指定って
どのように書けばよろしいのでしょうか?
■ このスレッドは過去ログ倉庫に格納されています