正規表現道場@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/
0243nobodyさん
05/03/18 14:40:54ID:???$m_header =~/^Subject: *(.+\x0D?\x0A(?: .+\x0D?\x0A)*)/im;
普通はモジュール使うけど。
use Mail::Header;
my $head = Mail::Header->new(\*STDIN);
print $head->get('Subject');
0244241
05/03/18 18:00:07ID:R05cZtNs>>243
ありがとうございましたっ!!
242でも243でもできました。感謝です。
>>243
Mailで始まるモジュール、1つも入ってないのです・・・
・・・
0247nobodyさん
05/03/19 01:20:39ID:???そこまでしなきゃわかんないアマちゃんなのかよ!!!
$m_header = "Subject: =?ISO-2022-JP?B?GyRCJCIbKEI=?=\n =?ISO-2022-JP?B?GyRCJFsbKEI=?=\n";
$m_header = "Content-Type: text/plain\n Subject: foo\n bar\n";
0248nobodyさん
05/03/19 01:50:04ID:???0249nobodyさん
05/03/19 03:53:17ID:RErqV7fDすべての文字列の中から上の中の*********だけを取り出すことはできますか?
*は任意の文字列で、文字数も自由です。
0252nobodyさん
05/03/19 14:37:12ID:frwLr80o0253nobodyさん
05/03/19 16:05:41ID:???0254nobodyさん
05/03/19 18:00:42ID:???0255nobodyさん
05/03/19 18:15:41ID:???0256nobodyさん
05/03/19 19:58:20ID:???0257nobodyさん
05/03/19 22:11:06ID:???0258nobodyさん
2005/03/21(月) 12:03:14ID:???いろんな形の <br><br/><BR /> などなどを
<br /> に統一したい。どうしたらいいですか!?
<[Bb][Rr]*(\\)>
0259T女の竹田
2005/03/21(月) 12:19:14ID:???でどう?
<br clear="left">とかも入れるなら
s{<br[^>]*>}"<br />"sgi
かな。
0260T女の竹田
2005/03/21(月) 12:21:11ID:???s{<br( ?/)?>}'<br />'sgi
のほうがいいかな
0261nobodyさん
2005/03/21(月) 13:54:11ID:???↑ これは一体何をしたかったのだろう・・・。
んじゃ
s!<br(?>[^<>]*)>!<br />!igs;
ところで、 i g s m x e o とかのオプションって、書く順番とか決めてる?
どの順番がわかりやすいんだろうなー。
0263T女の竹田
2005/03/21(月) 14:39:41ID:???順番はsgieの順だな、他は使ったことがほとんどない
0264nobodyさん
2005/03/26(土) 01:18:00ID:vkj2cQCrhtmlのaタグに囲まれた文字、それとa閉じタグ以降の文字、を抽出したいのですが
例:<a href="http://hogehoge.com">aiueo</a>&nbsp;|
抽出後:aiueo&nbsp;|
のような感じです。
で、正規表現として「s/<a.*?>(.*?)</a>(.*?)/i」と書いたのですが、
aタグに囲まれたのは$1に入りましたが、a閉じタグ以降の文字が$2に入ってないんです。
どう書いたらよいのでしょうか?
0265nobodyさん
2005/03/26(土) 01:36:05ID:???それ、
s{<a.*?>(.*?)<}{a>(.*?)}i
になってるよ。sはいらない。
m!<a.*?>(.*?)</a>(.*?)!i
とでもしたら?
0266nobodyさん
2005/03/26(土) 09:11:49ID:???> で、正規表現として「s/<a.*?>(.*?)</a>(.*?)/i」と書いたのですが、
/をエスケープして「s/<a.*?>(.*?)<\/a>(.*?)//i」と書いてください。
0268nobodyさん
2005/03/26(土) 16:07:09ID:???0269nobodyさん
2005/03/26(土) 16:14:16ID:???0271268
2005/03/26(土) 16:16:30ID:???掲示板にAAの大量投稿荒らしが発生してしまって、
正規表現である程度は弾けないか、、と思いまして・・・
0272未承諾広告※ ◆TWARamEjuA
2005/03/26(土) 19:04:15ID:???このあたりはRock54でも難しかったりしますけれども(苦笑)
0273nobodyさん
2005/03/26(土) 19:18:46ID:???0275nobodyさん
2005/03/26(土) 20:19:03ID:???0276nobodyさん
2005/03/29(火) 10:39:16ID:???0277nobodyさん
2005/03/29(火) 18:07:37ID:???0278nobodyさん
2005/03/30(水) 01:42:50ID:???ご教授下さい。言語はPHPです。
下記参照
$strのヒアドキュメントから2パターンマッチしてます。
なぜ、"<!-- ▲パターンマッチのサンプル-->"これが
マッチしないのかがわからないのです。
====== source =============
$str = <<<_EOT_
<!-- ▼パターンマッチのサンプル -->
<p>パターンマッチ</p>
<!-- ▲パターンマッチのサンプル-->
_EOT_;
preg_match("/^<!--([^<>]+)-->/", $str, $match);
print_r($match);
====== source =============
====== 結果 =============
Array
(
[0] => <!-- ▼パターンマッチのサンプル -->
[1] => ▼パターンマッチのサンプル
)
============================
0279nobodyさん
2005/03/30(水) 04:18:21ID:???▼ で一回パターンマッチした時点でおしまい。
パターンマッチを複数回繰り返したいなら preg_match_all とかを使う。
0281nobodyさん
2005/03/30(水) 11:29:42ID:???環境はVBScriptで、VBScript.Regexpを使用しています。
元の文字列は
A 1
B 2
3
C 4
D 5
又は
B 1
D 2
3
C 4
A 5
この様な形です、そのときにBの列の値(上の例だと2\n 3、下の例だと1)を取得したいのですが、うまく取れません。
現在の正規表現は
B *((.*\n)*) *(A|C|D)
この形です、現在とれる値は上の例ですと(2\n 3\nC 4)下の例ですと(1\nD 2\n 3\nC 4)
この様になっています、どのようにすればよいでしょうか?
0282nobodyさん
2005/03/30(水) 12:29:28ID:???自分でsourceを弄くっているうちにmオプション取って書き込んでしまいました。
mオプション(単一行化)をつけ"
<!-- ターンマッチのサンプル-->"になぜマッチしないのかがわかりません。
<!-- から始まってるのに・・・
0284nobodyさん
2005/03/30(水) 16:28:08ID:FkBnaI5T20020301というような年月日名のファイルをプログラムで検索させる時
20020330以降というような判断条件を正規表現で表現できるでしょうか。
(もし20020350というファイルがあった場合条件合致としない)
プログラムですれば出来るのですが、条件は自由に編集できるようテキスト
で保存したいと考えています。
ちなみに私の正規表現知識は”\.^$[]*+?|()”くらいしかないです。
正規表現で出来るかが知りたいので使わないというのは無しでお願いします。
0285nobodyさん
2005/03/30(水) 16:46:46ID:???”だけ”だとできないんじゃね?
0286nobodyさん
2005/03/30(水) 16:56:58ID:???20020350 みたいな validation check までするとなると、
正規表現だけでやるのは無理と思った方が賢明と思われ。
0289nobodyさん
2005/03/30(水) 19:30:05ID:???0290nobodyさん
2005/03/30(水) 21:54:20ID:???0291nobodyさん
2005/03/30(水) 23:14:41ID:oXQqC/Dj「任意の範囲におさまる数」を検出することは出来るでしょうか?
たとえば、123〜4567の間の整数ならヒットする、という風にしたいのです。
0292nobodyさん
2005/03/30(水) 23:26:41ID:???0293nobodyさん
2005/03/30(水) 23:43:55ID:???$number =~ s/^(\d+)$/$ok = ($1 >= 123 and $1 <= 4567) ? 1 : 0/e;
printf qq|%s\n|, $ok ? 'OK': 'NG';
0294nobodyさん
2005/03/31(木) 00:01:39ID:???@result = grep { 123 <= $_ and $_ <= 4567 } $str =~ m/(\d+)/g;
$, = ', '; print @result;
0296nobodyさん
2005/03/31(木) 00:05:59ID:???0298nobodyさん
2005/03/31(木) 12:15:37ID:???1: を white space
2:<br> を 改行
3:あと strip_tags()
したいです。教えて下さい。
0299nobodyさん
2005/03/31(木) 12:28:22ID:???$txt = mb_ereg_replace(" ", "white space", $txt);
$txt = mb_ereg_replace("<br>", "改行", $txt);
$txt = mb_ereg_replace("あと", "strip_tags()", $txt);
0303nobodyさん
2005/03/31(木) 12:51:28ID:???$orig = mb_ereg_replace("<[Bb][Rr][^>]*>", "\n", $dest);
$orig = mb_ereg_replace("&[Nn][Bb][Ss][Pp];", "", $dest);
$orig = mb_ereg_replace("<[^>]*>", "", $dest);
0305nobodyさん
2005/04/04(月) 22:21:36ID:???『連続する文字列"_正規表現道場_"を除く、全角文字を含むすべての文字列』はどのように表現すればいいですか?
0306nobodyさん
2005/04/05(火) 21:17:54ID:???質問1
正規表現を使って、エディタの検索置換を利用してこれを一発で直すのは不可能でしょうか?
質問2
perlとか使えば可能でしょうか?
0307nobodyさん
2005/04/05(火) 23:19:41ID:???別に読めないわけでもないしほっとく。
0308nobodyさん
2005/04/07(木) 23:03:21ID:???0309nobodyさん
2005/04/08(金) 00:12:00ID:???そんな質問で答えられるかよ!
ソース(元の文書)のサンプルくらいないとどうにもならんよ。
「一二三五十六三郎一郎」 どれが名前かわかるか?
答え→全て名前w
0310nobodyさん
2005/04/08(金) 09:57:45ID:???0311nobodyさん
2005/04/08(金) 10:38:14ID:???0313nobodyさん
2005/04/09(土) 17:39:30ID:???電話番号だけは抜きたいと思っています。
基本的にアメリカ人が多いので、XXX.XXX.XXXX な文字並びだけど、
日本みたいに ー (ハイフン)で区切る、みたいな約束事ないし、すごい困ってます。
どうしたらいいでしょう?なにかヒントを下さい。
0314313
2005/04/09(土) 17:40:26ID:???0315nobodyさん
2005/04/10(日) 11:42:30ID:???/[\d\.\-]{4,15}/
0316nobodyさん
2005/04/13(水) 01:12:27ID:5d8FOn3zHTMLにおいて下のようなものがあるとします。
<html><head>...略...
<div>
<!--A-->
<p>Aです</p>
<!--/A-->
<!--B-->
<p>Bです</p>
<!--/B-->
</div>
...略...</html>
これの\n、\r、\tを取り除いた後、
preg_match_all("/<!--([A-Z]*?)-->.*?<!--\/\\1-->/", $pattern, $file);
で、マッチさせると、
<!--A-->がひとつだけのときには成功するのですが、
<!--B-->が加わるとブラウザのページが開かなくなります。
原因をご存知の方はお教えください。
0317nobodyさん
2005/04/15(金) 12:12:06ID:???calendarクラスで最初にコールされているメソッドがget???の物を調べたく、
perlの正規表現で、
(\w+)\s*=\s*Calendar\.getInstance.*?(!?\1)\.get
を指定しましたがうまくいきません。
下の個所ではヒットしないことを望んでいますが、1〜3行目でヒットします。
1 Calendar cal = Calendar.getInstance();
2 cal.setLenient(false);
3 cal.getTime();
.*?(!?\1)\.get は calendarインスタンスが最初に呼ばれている個所で、メソッドがgetで始まるを期待しています。
0318質問
2005/04/15(金) 19:01:05ID:jvrJ4EBi<郡部:吉見>
<市部:秩父>
<市部:川越>
↓上のデータを
<市部:さいたま市>
<郡部:吉見>
<市部:秩父市>
<市部:川越市>
のように先頭から「<市部:●●>」とマッチングするものを、
「<市部:●●市>」に置き換えるにはどうしたらよいでしょうか
(ただし、「●●」は流動的なものとする)
$data =~ s/<[市部:]*>/<市部:$_市>/;
上のようにやったところ、$_に何も値が入りません。
0319nobodyさん
2005/04/15(金) 19:05:08ID:???0320nobodyさん
2005/04/15(金) 19:13:10ID:???0321質問
2005/04/15(金) 19:18:57ID:jvrJ4EBiありがとうございました!
0322muro p5172-ipad05okidate.aomori.ocn.ne.jp/
2005/04/15(金) 20:01:28ID:???ぇ し の ァ ハ
け と ぉ ァ
うはっwww夢がひろがりんぐwwwwww
0323nobodyさん
2005/04/15(金) 20:49:10ID:???0324nobodyさん
2005/04/16(土) 00:12:52ID:???0325nobodyさん
2005/04/20(水) 16:00:48ID:ns2jNcNy<A HREF='http://www.hogehoge.ne.jp/~nakama/'>
<A HREF=http://www.hoge.ne.jp/~nakama/>
<A HREF=http://www.hoge.ne.jp/~nakama/ TARGET=_blank>
上からURLだけを抜き出したいのですがいまいちわかりません。
何となく正規表現はわかっているのですが。
解決になるような事でもなんでもいいので教えてください。よろしくお願いします。
0326nobodyさん
2005/04/20(水) 17:11:27ID:???なんとなく抜き出せるだろうから
なんとなく聞く必要がないんじゃないかと思う
0327nobodyさん
2005/04/20(水) 18:20:03ID:???0328nobodyさん
2005/04/20(水) 18:30:19ID:???0329nobodyさん
2005/04/20(水) 18:46:23ID:???0330nobodyさん
2005/04/20(水) 20:05:32ID:y0ltMBju<select name="a">
<option value="A" selected>■</option>
<option value="B">★</option>
<option value="C">▲</option>
</select>
<select name="b">
<option value="A">■</option>
<option value="B">★</option>
<option value="C" selected>▲</option>
</select>
’;
となっている場合、
『selected』が付いているoptionにマッチさせ、
そのvalue値【A】を$hoge1へ代入するしたいのですが、
正規表現はどのようになるのでしょうか?
$hoge =~ /value="?([^"]+)"? selected/g
$hoge1 = $1;
$hoge2 = $2;
↑これでは、ダメでした。
御教授 お願い致しますm( __ __ )m
0331nobodyさん
2005/04/20(水) 21:26:49ID:???その正規表現でもAとCを取り出せるんだけどね。
0332nobodyさん
2005/04/21(木) 00:11:41ID:???@array = $str =~ /<option\s+(?:\S+\s+)*?(?:value\s*=\s*(?:"([^"]*)"|'([^']*)'|(\S*)).*?selected|selected\s+(?:\S+\s+)*?value\s*=\s*(?:"([^"]*)"|'([^']*)'|(\S*)))\s*(?:\S+\s+)*?>/g;
$hoge1 = join"",splice @array,0,6;
$hoge2 = join"",splice @array,0,6;
0333nobodyさん
2005/04/21(木) 00:17:28ID:???@array = $str =~ /<option value="([^"]+)" selected>/g;
$hoge1 = shift @array;
$hoge2 = shift @array;
0334nobodyさん
2005/04/21(木) 00:53:08ID:???@array = $html =~ /<a\s+.*?href\s*=\s*(?:"([^"]*)"|'([^']*)'|(\S*)).*?>/gi;
push @url, join"", splice @array,0,3 while @array;
0335nobodyさん
2005/04/21(木) 09:53:22ID:L6TjsDSV以下のように自分で決めたブロック要素的なコメントタグを挟んでいます。
---------------------------
<!--mytag-->
aaa
<!--mytag-->
bbb
<!--/mytag-->
ccc
<!--/mytag-->
ddd
<!--mytag-->
eee
<!--/mytag-->
----------------------------
この中で、内側にそれ以上自分で決めた同一コメントタグが
入っていない部分、つまり、
<!--mytag-->
bbb
<!--/mytag-->
と、
<!--mytag-->
eee
<!--/mytag-->
の部分のみ取り出したいのですが、どのような式を書けば良いでしょうか。
0336335
2005/04/21(木) 11:55:55ID:L6TjsDSV$s = "<¥!¥-¥-mytag¥-¥->";
$e = "<¥!¥-¥-¥/mytag¥-¥->";
$rgexp = "/$s(?:(?!($s|$e)).)+$e/s";
で判別できました。
0337nobodyさん
2005/04/21(木) 13:58:44ID:???掲示板に書き込まれた本文の行末に改行タグがある場合、
それを除去するという処理を加えたいと思っています。
$textが"test<BR><BR><BR><BR><BR><BR><BR><BR><BR>"などのように、
文末に<BR>がある限り、それを取り除く処理にしたいと思います。
この場合ですと、"test"という文字列だけにしたいと思っています。
$textが"test<BR><BR><BR><BR>test2<BR><BR><BR><BR><BR>"であれば、
"test<BR><BR><BR><BR>test2"にしたいと思っています。
while ($text =~ /<BR>$/) {
$text =~ s/<BR>$//g;
}
この記述で動かないのですが、どこが原因なのでしょうか。
0340330
2005/04/22(金) 00:10:20ID:???アドバイスありがとうございます。
>>333様
御教授ありがとうございます。
早速試してみましたが、うまく代入されませんでした。。。
$_ = $hoge;
my @hoge = /value="(.+)" selected/g;
$hoge1 = $hoge[0];
・
・
・
・
これで、自己解決いたしました。
0341nobodyさん
2005/04/24(日) 04:15:14ID:???>>333がダメってのは、「$str」 を 「$hoge」 にしてないだけだと思うがw
自分的には↓で済む気がする。
my ($hoge1, $hoge2) = $hoge =~ /<option\s*?value="([^">]*?)"\s*?selected>/g;
あと $hoge は、ヒアドキュメントにしる。
0342nobodyさん
2005/04/26(火) 15:49:33ID:???「先頭から最後まで<br>と\s以外の文字が1つもない」
・・・
■ このスレッドは過去ログ倉庫に格納されています