正規表現道場@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さん辺りが書いてくれるカモ・・・・
0404nobodyさん
02/07/03 15:23ID:kdrdWrUqジサクジエンデシタ
0405ahaaann
02/07/03 17:36ID:eJO6ovYm0406nobodyさん
02/07/04 19:37ID:hx78UF1Qログイン名をsageで登録しようとすると、すでに登録されていて
あと、sage1、sage34が登録可能です。みたいに、するにはどうすれば
宜しいのでしょうか?
お願い致します。
0409nobodyさん
02/07/08 15:23ID:3WwYz0B2YYYY/MM/DD 形式で、1900年から2099年まで処理可能な日付チェック。
0410nobodyさん
02/07/08 15:38ID:???0411nobodyさん
02/07/08 22:10ID:Hy1uHDxp1.$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:???s/^(.*)\?(.+)$/$1\?/;
0413nobodyさん
02/07/08 23:00ID:???それはプログラム技術板で半年くらい前に見たやつだ。半ばネタとして作られたものだが、
要件は満たしている。
・・・・・・・・・・・遅いけど。
0414nobodyさん
02/07/08 23:02ID:tPkNiwTiやってみます
0415>>409
02/07/10 17:12ID:???($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:PCSWC5jPmy $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;
だけでよい?
ってあった場合""の中身だけ取り出すのはどうしたらいいでしょうか?
(つまりこの場合、aaa.jpgと#000000)
/"([^"]+)"/g;
0420417
02/07/11 02:41ID:???0423nobodyさん
02/07/12 08:54ID:UFWs6b8F0425nobodyさん
02/07/14 00:00ID:???0427nobodyさん
02/07/14 05:32ID:???0429nobodyさん
02/07/14 15:59ID:???0430性器初心者
02/07/15 14:17ID:5LzaPgx6半角英数文字のパスワードのチェックをかけたくて,言語PHPなんですが。。。
echo ereg('([a-zA-Z0-9_])',"123=$");
結果は1と返ってきます。FALSEと評価してほしいのですが?
どなたかご指導くださいな。
0431コギャル&中高生
02/07/15 16:38ID:VlVzBsmsお役立ちリンク集
必ず役立ちます
コギャルとH出来るサイトはここ
ヌキヌキ部屋へ直行便
↓
http://kado7.ug.to/wowo/
0432nobodyさん
02/07/15 21:45ID:???リンクさせてるヤシが目につくから、そのサーバ自体をDOSるのもこれ
たのし!
0433ぽよぽようんこ
02/07/15 22:30ID:uZYoW+tQperl使ってます。
if ($line !~ /\w{3,12}/) {&error;}
ってやってます。僕的には英数3〜12文字じゃなかったらエラーって意味のつもり
なのですがうまく行きません。下限は有効なんですが、上限12文字超えても
エラーが出ないんです。どこかおかしなところありますか?宜しくお願いします。
0434nobodyさん
02/07/15 22:32ID:???先頭から行末までがないだろうが。
0435ぽよぽようんこ
02/07/15 22:38ID:???僕は1年以上もマッチングというものの使い方を間違えていました!
なぜ今までうまく行っていたんだろう。
取り合えず、どうもありがとうございました。大変助かりました。
0436nobodyさん
02/07/15 22:46ID:???文字列の中に埋もれてる連続英数字数を判定したいなら最短マッチで。
if ($line !~ /\w{3,12}?/) {&error;}
0438436じゃないよ
02/07/15 23:27ID:???0439ぽよぽようんこ(本物)
02/07/16 00:00ID:???>>436 ありがとうございます。ていうか?って半年くらい使ってないから何なのか忘れちったよ。
とステハンの名誉を守ったり。何やってんだ俺。
0440ぽよぽようんこ(本物)
02/07/16 00:06ID:???0441nobodyさん
02/07/16 14:04ID:FumLlavC素人的発想で
$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;
とかやってみたけど駄目でした…
0443素人
02/07/16 23:10ID:???こんなのしか書けない。しかも合ってるか分からない。
$data2 =~ s/<(A|\/A|BR)/<>$1/ig;
$data2 =~ s/<[^>]+>//g;
$data2 =~ s/<>(A|\/A|BR)/<$1/ig;
一発でやるの教えてください。
0444nobodyさん
02/07/16 23:26ID:???0445ぽよぽようんこ(本物)
02/07/16 23:52ID:???s/<(?:(?!BR|\/?A[^>]*).)*>//g;
0447素人
02/07/17 00:03ID:???でも全然意味が分からない。
0449nobodyさん
02/07/17 22:13ID:???[[と]]の間に囲まれていないabcを置き換えしたいのです。
[[zzzabczzz]]や[[zzzabc]]や[[abczzz]]や[[abc]]にマッチさせず、
[zzzabczzz]やzzzabczzzなどのabcの部分を置き換えたいのです。
助けてください。
0450nobodyさん
02/07/17 22:31ID:???0451nobodyさん
02/07/18 00:01ID:???0453nobodyさん
02/07/18 19:16ID:???$dataの中に、id=とurl=とname=が含まれていて、なおかつ=が3個含まれていたら
真の値を返すようにしたいのですがどうやるのでしょうか?
(($data =~ /id= && url= && name=/) && ($data =~ /={3}/)) || exit;
0454453
02/07/18 19:25ID:???id=とurl=とname=が含まれていて、なおかつ&が2個含まれていたらの場合です。
0455nobodyさん
02/07/18 22:43ID:pCMKii71$_ = $data;
(/id=/ and /=url/ and /name=/ and (tr/&// == 2))
でいい気が。
0459nobodyさん
02/07/19 13:27ID:SM5AMgkw但し、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:???0461nobodyさん
02/07/19 14:04ID:???大文字にマッチさせたくないんだったら、
\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:???0467nobodyさん
02/07/20 07:10ID:???0468間違えた
02/07/20 07:14ID:???0471.&rlo;正規表現は簡単ね&lro;
02/07/20 17:15ID:???>>466>>469が正規表現わかってないという根拠は?
少なくとも>>468のようなとんちんかんな正規表現を見ての意見だと思うが…。
0472あぼーん
NGNG0473薄らキリストが見える
02/07/20 19:06ID:???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:???正規 表現
これを自然な訳と思えるあなたとは日本語で話したくありません
0478nobodyさん
02/07/22 20:20ID:???で、2つの | はどういう役割をしているのでしょうか?
0479nobodyさん
02/07/22 20:42ID:???$c =~ /[^A-Za-z0-9;/&?:@=+$,\-_.!~*'()%]/
でもいいし
$c =~ m{[^A-Za-z0-9;/&?:@=+$,\-_.!~*'()%]}
でも何でもいいよ。
0480nobodyさん
02/07/22 20:42ID:???0481479
02/07/22 20:51ID:???はだめでした。
$c =~ /[^A-Za-z0-9;\/&?:@=+$,\-_.!~*'()%]/
です。
デリミタは普通 / を使います。この場合先頭の m は省略できますが、
中身のパターンに / が含まれる場合は \/ というようにエスケープしないといけません。
それを避けるためにデリミタを / 以外のもの | に変えているのです。
0483nobodyさん
02/07/23 02:19ID:XF1QbVW30484nobodyさん
02/07/23 04:14ID:8Y4x0Hwt54<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:???最後の<br>が入んないけど、まぁこんなのどうでしょう。
my $data = ...;
my $foo = join( "<br>", (split( /<br>/i, $data))[0..5] );
0486484
02/07/23 04:58ID:???0488nobodyさん
02/07/25 17:43ID:???0490nobodyさん
02/07/25 18:09ID:???s/っぱいだ/ない/;
0491nobodyさん
02/07/25 19:52ID:???0492491
02/07/25 19:53ID:???0493nobodyたん
02/07/25 20:26ID:???0494_
02/07/28 16:28ID:/dbFo95oどうもうまくいきません。
(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:???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
0498494
02/07/28 18:13ID:???あああ、それ無し無し。恥ずかしい間違いでした。
>>496
ありがとうございます。
なるほど、いっぺんreverseするんですね。
どこかで使えそうな手なので、覚えておきます。
0500nobodyさん
02/07/28 18:55ID:???0502500
02/07/28 19:03ID:???はは
■ このスレッドは過去ログ倉庫に格納されています