トップページ⇒php
986コメント301KB

正規表現道場@2ch

■ このスレッドは過去ログ倉庫に格納されています
0001ヽ(´▽`)ノ2001/07/26(木) 09:03ID:???
以外と毛嫌いして居る人も多そうな正規表現、
でもperlを使いのなす上で避けて通れない道だったりするかもです。
そこで、スクラップブック的に目に止まったカッコイイ正規表現を
書き留めておこうと言うスレッドです。
質問する時は言語と、得たい結果をなるべく詳しく書いてね。

取り合えず僕が知ってる有用なリンクです。
http://www.din.or.jp/~ohzaki/perl.htm
http://www.kt.rim.or.jp/~kbk/regex/regex.html

もっとイイ(・∀・) リンクは>>2-10さん辺りが書いてくれるカモ・・・・
0403nobodyさん02/07/02 01:55ID:???
>>399
あらてのアラシか?
0404nobodyさん02/07/03 15:23ID:kdrdWrUq
>399-403
ジサクジエンデシタ
0405ahaaann02/07/03 17:36ID:eJO6ovYm
ahaann
0406nobodyさん02/07/04 19:37ID:hx78UF1Q
教えて下さい
 ログイン名をsageで登録しようとすると、すでに登録されていて
あと、sage1、sage34が登録可能です。みたいに、するにはどうすれば
宜しいのでしょうか?
お願い致します。
0407nobodyさん02/07/04 19:45ID:???
>>406
データベースをつかうかファイルにデータ保存してもっておくかすればいいじゃん。
0408nobodyさん02/07/04 19:47ID:???
>>406
あるかどうか調べて、あったらランダムに数字を付け足した文字を出せばいいんじゃない?
0409nobodyさん02/07/08 15:23ID:3WwYz0B2
/((19(0[48]|[2468][048]|[13579][26])|20([02468][048]|[13579][26]))\/02\/29|(19|20)\d{2}\/((04|06|11)\/(0[1-9]|[12]\d|3[0])|(0[13578]|10|12)\/(0[1-9]|[12]\d|3[01])|(02\/(0[1-9]|1\d|2[0-8]))))/
YYYY/MM/DD 形式で、1900年から2099年まで処理可能な日付チェック。
0410nobodyさん02/07/08 15:38ID:???
わざわざ、正規表現で行う必要あるのかと…(略
0411nobodyさん02/07/08 22:10ID:Hy1uHDxp
たとえば、
1.$rei = abc?def?ghi? というのと、
2.$rei = abc?def?ghi というのがあるとして、

?が最後につくかつかないかを判別する方法って
なにかありますか?
それで、2の場合、
$rei = abc?def?ghi を
$rei = abc?def? と、最後のghiをカットする
のも知りたいです。

やってみたのは、
1.$rei =~ s/(\?)(ghi)(\?)(jklm)$/$1$2$3/g;
2.$rei =~ s/(\?)(ghi)(\?)(jklm)(\?)$/$1$2$3$4$5/g;
でした。
(ghi) や (jklm) のところを正規表現したいんですが、
何をあててやればいいんですか?
\w{0,} とかやってみたんですが、うまくいかなくて。
0412nobodyさん02/07/08 22:27ID:???
 if( /\?$/ )

 s/^(.*)\?(.+)$/$1\?/;
0413nobodyさん02/07/08 23:00ID:???
>>410
それはプログラム技術板で半年くらい前に見たやつだ。半ばネタとして作られたものだが、
要件は満たしている。

・・・・・・・・・・・遅いけど。
0414nobodyさん02/07/08 23:02ID:tPkNiwTi
> 412
やってみます
0415>>40902/07/10 17:12ID:???
m!\d{4}/\d{2}/\d{2}!;
($year, $month, $day) = ($1, $2, $3);
next unless (($year >= 1900) and ($year <= 2099) and ($month > 0) and ($month <= 12) and ($day > 0) and ($day <= 31))

ま、>>409 はネタだと思うが。
0416nobodyさん02/07/10 23:27ID:PCSWC5jP
HTTP::Request関数を使うとき、メソッドがPOSTの場合、

my $req = new HTTP::Request POST => $URL;
$req->content_type('application/x-www-form-urlencoded');
$req->content('match=www&errors=0');

って書いたけど、GETの場合は、

my $req = HTTP::Request->;new(GET => $URL;

だけでよい?
0417 02/07/11 00:28ID:???
<BODY background="aaa.jpg" bgcolor="#000000">
ってあった場合""の中身だけ取り出すのはどうしたらいいでしょうか?
(つまりこの場合、aaa.jpgと#000000)
0418nobodyさん02/07/11 00:39ID:???
>>417
/"\w"/g;
0419 ◆K1SiC5MI 02/07/11 01:38ID:???
>>417
/"([^"]+)"/g;
042041702/07/11 02:41ID:???
どもです。/"\w+"/g で出来ました
0421nobodyさん02/07/11 10:43ID:???
>>420
\wには.と#が含まれんが本当にできたのか?
042241802/07/12 00:05ID:???
>>421
昨日書き込みしたあとから思ってた。
(あーこれ#とかはいらねーからだめだわ。でも書き直すのめんどくさいしいいか。)
0423nobodyさん02/07/12 08:54ID:UFWs6b8F
/(^-^)/
0424nobodyさん02/07/13 01:14ID:???
s/>>423//;
0425nobodyさん02/07/14 00:00ID:???
s/424の人生//g;
0426 02/07/14 01:01ID:???
s/425の将来/鬱/g;
0427nobodyさん02/07/14 05:32ID:???
$2ch =~ s/2ch/3ch/g;
0428nobodyさん02/07/14 12:17ID:???
s/>>428/俺/g;
0429nobodyさん02/07/14 15:59ID:???
$here =~s/^.*$/削除依頼/s;
0430性器初心者02/07/15 14:17ID:5LzaPgx6
すんません。正規表現わかんないですー。
半角英数文字のパスワードのチェックをかけたくて,言語PHPなんですが。。。

echo ereg('([a-zA-Z0-9_])',"123=$");

結果は1と返ってきます。FALSEと評価してほしいのですが?
どなたかご指導くださいな。
0431コギャル&中高生02/07/15 16:38ID:VlVzBsms
http://www1.ocn.ne.jp/~kado77/mimi/

お役立ちリンク集
必ず役立ちます

コギャルとH出来るサイトはここ
ヌキヌキ部屋へ直行便
↓
http://kado7.ug.to/wowo/
0432nobodyさん02/07/15 21:45ID:???
なんか最近、アクセス数を荒稼ぎするためにスレ違いのURLアドレスを
リンクさせてるヤシが目につくから、そのサーバ自体をDOSるのもこれ
たのし!
0433ぽよぽようんこ02/07/15 22:30ID:uZYoW+tQ
しつもんさせてちょ。
perl使ってます。
if ($line !~ /\w{3,12}/) {&error;}
ってやってます。僕的には英数3〜12文字じゃなかったらエラーって意味のつもり
なのですがうまく行きません。下限は有効なんですが、上限12文字超えても
エラーが出ないんです。どこかおかしなところありますか?宜しくお願いします。
0434nobodyさん02/07/15 22:32ID:???
if ($line !~ /^\w{3,12}$/) {&error;}
先頭から行末までがないだろうが。
0435ぽよぽようんこ02/07/15 22:38ID:???
!!なんと!!
僕は1年以上もマッチングというものの使い方を間違えていました!
なぜ今までうまく行っていたんだろう。
取り合えず、どうもありがとうございました。大変助かりました。
0436nobodyさん02/07/15 22:46ID:???
>>433
文字列の中に埋もれてる連続英数字数を判定したいなら最短マッチで。
if ($line !~ /\w{3,12}?/) {&error;}
0437ぽよぽようんこ02/07/15 23:06ID:???
>>436
アフォでつか? レベルが低過ぎるね!
0438436じゃないよ02/07/15 23:27ID:???
感じわる〜
0439ぽよぽようんこ(本物)02/07/16 00:00ID:???
>>437 こらこら。人のステハン拾うな。
>>436 ありがとうございます。ていうか?って半年くらい使ってないから何なのか忘れちったよ。
とステハンの名誉を守ったり。何やってんだ俺。
0440ぽよぽようんこ(本物)02/07/16 00:06ID:???
以上、自作自演でしたー。
0441nobodyさん02/07/16 14:04ID:FumLlavC
<BR>と<A>以外のタグを取り除くにはどうすればよいのでしょうか?
素人的発想で

$data2 =~ s|<BR>|kaigyo|ig;
$data2 =~ s|<A(.*?)>|ri$1nk|ig;
$data2 =~ s|</A>|rinktoji|ig;
$data2 =~ s|http:(.*?)<BR>|jido$1rin|ig;

$data2 =~ s|<(.*?)>||g;

$data2 =~ s|kaigyo|<BR>|ig;
$data2 =~ s|ri(.*?)nk|<A$1>|ig;
$data2 =~ s|rinktoji|</A>|ig;
$data2 =~ s|jido(.*?)rin|<A HREF="http:$1">http:$1</A><BR>|ig;

とかやってみたけど駄目でした…
0442nobodyさん02/07/16 14:43ID:???
>>441 Perlメモ見れ
0443素人02/07/16 23:10ID:???
>>441
こんなのしか書けない。しかも合ってるか分からない。

$data2 =~ s/<(A|\/A|BR)/<>$1/ig;
$data2 =~ s/<[^>]+>//g;
$data2 =~ s/<>(A|\/A|BR)/<$1/ig;

一発でやるの教えてください。
0444nobodyさん02/07/16 23:26ID:???
ttp://www.din.or.jp/~ohzaki/perl.htm#Tag_Remove
0445ぽよぽようんこ(本物)02/07/16 23:52ID:???
この程度のこともできんのか?
s/<(?:(?!BR|\/?A[^>]*).)*>//g;
0446素人02/07/17 00:01ID:???
>>445
>>444に書いてあったモジュールで遊ぼうかと思ったところに…

おおお!と思ったんですがエラーが出ます。なんで?
0447素人02/07/17 00:03ID:???
できました!

でも全然意味が分からない。
0448nobodyさん02/07/17 02:14ID:???
>>445
んならこーじゃねーの?
s/<(?:(?!BR|\/?A[\s>][^>]*).)*>//ig;
0449nobodyさん02/07/17 22:13ID:???
Perlの正規表現で悩んでいます。
[[と]]の間に囲まれていないabcを置き換えしたいのです。
[[zzzabczzz]]や[[zzzabc]]や[[abczzz]]や[[abc]]にマッチさせず、
[zzzabczzz]やzzzabczzzなどのabcの部分を置き換えたいのです。
助けてください。
0450nobodyさん02/07/17 22:31ID:???
[^\[\[.*abc*\]\]]
0451nobodyさん02/07/18 00:01ID:???
http://freehome.kakiko.com/tuk/iiyo.html
0452nobodyさん02/07/18 00:57ID:???
>>449
WikiWiki ですか?いいもの出来たら公開してね〜
0453nobodyさん02/07/18 19:16ID:???

$dataの中に、id=とurl=とname=が含まれていて、なおかつ=が3個含まれていたら
真の値を返すようにしたいのですがどうやるのでしょうか?

(($data =~ /id= && url= && name=/) && ($data =~ /={3}/)) || exit;

045445302/07/18 19:25ID:???
すいません間違えました。

id=とurl=とname=が含まれていて、なおかつ&が2個含まれていたらの場合です。
0455nobodyさん02/07/18 22:43ID:pCMKii71
($data =~ /(?=.*id=)(?=.*url=)(?=.*name=)/ && $data =~ /^(?:[^&]*&[^&]*){2}$/)
0456 ◆Smt8k/ss 02/07/19 00:01ID:???
($data=~ /(?=.*id=)(?=.*url=)(?=.*name=)/ && $data=~ tr/&//== 2);
0457 ◆JAPH9PWA 02/07/19 00:12ID:???
フツーに
$_ = $data;
(/id=/ and /=url/ and /name=/ and (tr/&// == 2))
でいい気が。
0458 ◆JAPH9PWA 02/07/19 00:13ID:???
s/=url/url=/
0459nobodyさん02/07/19 13:27ID:SM5AMgkw
リンクを張りたいのですが。http://aaa.bbb.ccc/ddd/ee.ff

但し、URLの中に「AaA」又は「BaB」という文字列があるならば、
リンクさせない方法はどうすればいいのでしょうか。
http://aaa.bbb.ccc/ddd/ee.ffAaA
http://aBaBaa.bbb.ccc/ddd/ee.ff

$mes=~s/http:\/\/([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/<a href=\"http:\/\/\:$2\" target=\"_blank\">http:\/\/\:$2<\/a>/ig;
0460nobodyさん02/07/19 13:56ID:???
/AaA|BaB/;
0461nobodyさん02/07/19 14:04ID:???
>>459
大文字にマッチさせたくないんだったら、
\wをa-z0-9、iを削除でいいんじゃないの?
どうでもいいけど、エスケープしすぎ。
0462nobodyさん02/07/19 14:07ID:???
区切りに / でなく | でもつかえばエスケープする回数も減るだろ。
0463nobodyさん02/07/19 14:55ID:???
傾斜つまようじ症候群というやつですな。
0464nobodyさん02/07/19 15:37ID:???
掲示板で特定のタグ「以外の」タグが書き込まれたら真を返す, というのがやりたいのですが.
とりあえず "<" で始まり, こちらが指定(a, em, dl, etc...)したもの以外の文字列(font, blink, hogehoge, etc...)があったら, というカンジで.
0465nobodyさん02/07/19 15:39ID:???
unless ( $_ =~ /<(a|img|font).*>/ )
0466nobodyさん02/07/20 05:20ID:???
>>465
正規表現わからんなら書くな。
0467nobodyさん02/07/20 07:10ID:???
if(/<(?!\/|a\s|img|font)[^>]*>/g);
0468間違えた02/07/20 07:14ID:???
if(/<(?!\/|a\s|img|font)[^>]*>/i);

0469nobodyさん02/07/20 14:18ID:???
>>468
正規表現わからんなら書くな。
0470nobodyさん02/07/20 16:31ID:???
>>466
>>469
そう言うおまいも正規表現わからんくせに書くな。
0471.&rlo;正規表現は簡単ね&lro;02/07/20 17:15ID:???
>>470
>>466>>469が正規表現わかってないという根拠は?
少なくとも>>468のようなとんちんかんな正規表現を見ての意見だと思うが…。
0472あぼーんNGNG
あぼーん
0473薄らキリストが見える 02/07/20 19:06ID:???
34 :(*゚Д゚)さん :02/07/20 14:53 ID:???
http://eclat.gaiax.com/home/rx72watanabe
マターリ観察中。。。。。 盛り上って来たら一気に攻撃をしかけろ!!!!


35 ::02/07/20 18:45 ID:???
http://isweb44.infoseek.co.jp/family/kmk25y/km-aa.swf
http://isweb44.infoseek.co.jp/family/kmk25y/km-aa2.swf
http://isweb44.infoseek.co.jp/family/kmk25y/km-aa3.swf
http://isweb44.infoseek.co.jp/family/kmk25y/km-aa4.swf
http://isweb44.infoseek.co.jp/family/kmk25y/klist1.swf
http://isweb44.infoseek.co.jp/family/kmk25y/klist2.swf


0474nobodyさん02/07/20 22:23ID:???
つーか正規表現って最初に訳した香具師ドキュソだな
もっと適切な日本語使ってくれよ
0475nobodyさん02/07/21 16:35ID:???
って別に検索に用いるためだけのじゃないし。
言語処理関係の勉強すれば正規表現ってのは
自然な訳だと思えるようになるよ。
0476nobodyさん02/07/22 00:29ID:???
regular expression
正規 表現

これを自然な訳と思えるあなたとは日本語で話したくありません
0477♦#02/07/22 14:53ID:???
>>476
じゃあ、英語かなんかで話したいのか?
0478nobodyさん02/07/22 20:20ID:???
$c =~ m|[^A-Za-z0-9;/&?:@=+$,\-_.!~*'()%]|

で、2つの | はどういう役割をしているのでしょうか?
0479nobodyさん02/07/22 20:42ID:???
>>478
$c =~ /[^A-Za-z0-9;/&?:@=+$,\-_.!~*'()%]/
でもいいし
$c =~ m{[^A-Za-z0-9;/&?:@=+$,\-_.!~*'()%]}
でも何でもいいよ。
0480nobodyさん02/07/22 20:42ID:???
 / 以外も区切りに使えることを知らないのか?結局正規表現だよ。
048147902/07/22 20:51ID:???
$c =~ /[^A-Za-z0-9;/&?:@=+$,\-_.!~*'()%]/
はだめでした。
$c =~ /[^A-Za-z0-9;\/&?:@=+$,\-_.!~*'()%]/
です。
デリミタは普通 / を使います。この場合先頭の m は省略できますが、
中身のパターンに / が含まれる場合は \/ というようにエスケープしないといけません。
それを避けるためにデリミタを / 以外のもの | に変えているのです。
048247802/07/22 22:29ID:???
>>479-481
空白文字を除く任意の非英数字が
区切り文字に使えるとは知りませんでした。
どうもありがとうございました。
0483nobodyさん02/07/23 02:19ID:XF1QbVW3
オレも勉強になった。
0484nobodyさん02/07/23 04:14ID:8Y4x0Hwt
$data = '1<br>23<Br>3<br>45<br><br>666<br>
54<br>354<br>54<Br>43<br>';

の時、例えば
6個目の<br>から先を削除する方法ってわかります?
理想結果はこんな感じです。

$result = '1<br>23<Br>3<br>45<br><br>666<br>';

0485nobodyさん02/07/23 04:36ID:???
>>484
最後の<br>が入んないけど、まぁこんなのどうでしょう。
my $data = ...;
my $foo = join( "<br>", (split( /<br>/i, $data))[0..5] );
048648402/07/23 04:58ID:???
できました!ありがとうございました。
0487nobodyさん02/07/23 20:42ID:???
>>476
言語処理の勉強するか首つって死んじまえ。
0488nobodyさん02/07/25 17:43ID:???
さっくりとage
0489nobodyさん02/07/25 17:55ID:???
>>488
sageてんじゃねえか!
0490nobodyさん02/07/25 18:09ID:???
$_= 'この板、人いっぱいだね';

s/っぱいだ/ない/;
0491nobodyさん02/07/25 19:52ID:???
CGIに適したPerl以外の言語は何?Ruby?
049249102/07/25 19:53ID:???
誤爆った
0493nobodyたん02/07/25 20:26ID:???
perl の「正規表現」って実は正規表現ではない罠。
0494_02/07/28 16:28ID:/dbFo95o
perlで文字列中の一番後ろの()内を切り出したいのですが、
どうもうまくいきません。

(A)B
B(A)
(C)B(A)
(A)B(C)
B(C)(A)
A

いずれもAを切り出したくて、

if ($foo =~ /(\(([^\(]+)\))+$/) {
$foo = $2;
};

とかやってみたのだけど、なんか変です。
簡単に記述できそうな気がするのだけど……。
0495nobodyさん02/07/28 17:24ID:???
>一番後ろの()内を切り出したい
とあるのに
>(A)B(C)
においてもAを切り出したいって意味わからん。
0496nobodyさん02/07/28 17:25ID:???
while(<DATA>){
chomp;
my $rev = reverse $_;
$rev =~ m/^.*?\)(.*?)\(/ and print "[$_]--$1", "\n";
}
__DATA__
(A)B
B(A)
(C)B(A)
(A)B(C)
B(C)(A)
A
0497nobodyさん02/07/28 18:07ID:???
>>496
まわりくどっ!
049849402/07/28 18:13ID:???
>>495
あああ、それ無し無し。恥ずかしい間違いでした。

>>496
ありがとうございます。
なるほど、いっぺんreverseするんですね。
どこかで使えそうな手なので、覚えておきます。
0499nobodyさん02/07/28 18:26ID:???
>>498
ほんとにそれで納得できた? リバースは(A)のように括弧内の文字が1文字固定
ならいいんだろうけど…。
0500nobodyさん02/07/28 18:55ID:???
s#\(A\)(\r\n|\r|\n)?$#$1#;
0501nobodyさん02/07/28 18:59ID:???
>>500
質問?
050250002/07/28 19:03ID:???
切り出すってそう言う意味かあ
はは
050349402/07/28 20:00ID:???
>>499
最後にもう一回reverseしてやれば良いように思いますが、
甘いですか?
■ このスレッドは過去ログ倉庫に格納されています