正規表現道場@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さん辺りが書いてくれるカモ・・・・
0359nobodyさん
02/05/16 00:44ID:???$_ = 'Look-behindで文章中の特定文字列以降の文字を消すよ.';
s/(?<=特定文字列).*//s;
Perl 5.005 以前のバージョンならこっちで.
s/(特定文字列).*/$1/s;
0361nobodyさん
02/05/26 06:41ID:65ctyZPu$str = "<a href=\"./hoge/hoge.html\"><img src=\"./hoge.jpg\"></a>";
if($str =~ /<a href="(.*?\.jpg)">/i){print $1."\n";}
とすると、何も出力されないはずなのに
./hoge/hoge.html"><img src="./hoge.jpg
と出力されてしまいます。どうすればよいのでしょうか?
0362nobodyさん
02/05/26 07:59ID:???いや、.*?なら出力されると思うよ。(<a href="になってるのは間違い?)
./hoge.jpgが欲しいなら /<img src="([^"]+\.jpg)">/に変えてみれば?
0363nobodyさん
02/05/26 08:22ID:65ctyZPuいや、./hoge.jpgが欲しいんじゃなくて
aタグの""の中身にはマッチしないから何も出力しないようにしたいのですが。
(もちろんhtmlとかにすると出力されるようにはしたい)
0365nobodyさん
02/05/27 00:50ID:???0367nobody
02/06/24 01:33ID:???http://pc.2ch.net/test/read.cgi/php/1011460833/24
これお願いします
0368nobodyさん
02/06/24 03:27ID:???0369nobodyさん
02/06/24 03:39ID:???Perlでド適当に書くとこんな感じ.
my ($href, $title);
while ($str =~ m{<a\s+(?:href\s*=\s*(["'])(.+?)\1|.)+?>(.+?)</a>}gis) {
($href, $title) = ($2, $3);
$href or next;
print "href: $href\ntitle: $3\n\n";
}
0371367
02/06/24 04:33ID:???ありがとうございます。
参考にして
$u="dsffds<a target=\"_self\" href=\"http://www.age.sage/\" name=\"lewraw\">age</a>aaa";
$pt="<a.*href=\"?(http://.[^\"[:space:]>]*).*>(.*)</a>";
if(ereg($pt,$u,$a))print_r($a);
みたいにしてみたらうまくいきました。
Array
(
[0] => <a target="_self" href="http://www.age.sage/" name="lewraw">age</a>
[1] => http://www.age.sage/
[2] => age
)
なんか問題があったら指摘よろしくです。
0373nobodyさん
02/06/28 00:21ID:J53QbdCk(taro|jiro)って書いたら動きませんでした。アホですか?
0375nobodyさん
02/06/28 01:31ID:J53QbdCk一応書いておくと、PHPで、
ereg((taro|jiro),$name)
と書いてあります。アホですか?
0376nobodyさん
02/06/28 03:26ID:???アホだな。
コードはもちろん言語も書いてない。
どういうデータをマッチ対象にしてるのかも書いてない。
373の質問で答えが出ると本気で考えている?
それだけの状態で「taroかjiroにマッチさせるならそれでいいはずです。」
としか答えられないぞ。
ereg( 'taro|jiro', $name)
PHPは良く知らないけどその>>375のコードでエラー無く動くの?
0377nobodyさん
02/06/28 20:10ID:QMNhJJyt正規表現苦手でして、、すいません、、
0378nobodyさん
02/06/29 03:23ID:???俺、PHP全然解らないから、 ereg 関数の第1パラメーターが
正規表現もオッケーなのか解らないから答えようがない…
0379nobodyさん
02/06/30 14:39ID:ZCEQ9KmTこういう場合に、「hoge」に完全にマッチした場合のみ削除するにはどうすればいいのですか?
0380&r
02/06/30 14:41ID:???0381
02/06/30 14:47ID:5Ce/MloTこれはProxomitronのヘルプにあったんですが、Perlでこれをやるにはどうすればいいのでしょうか?
0383&r
02/06/30 14:57ID:???100 <= $hoge && $hoge <= 150;
これが真を返すか偽を返すかです。
0385382
02/06/30 15:05ID:???0386ororo
02/06/30 19:03ID:iJPZXMQB/root
/hoge
/root/hoge
/root/some/hoge
****************
で、/rootと/hogeだけ取り出すのって
どーやったらよいんでしょうか?
/*だと、/も含まれちゃうんで。
/がでて、その後に/以外の文字列が続くものを
検出したいんですけど。
[^/]とか使う感じのイメージはあるんですが。
0387ororo
02/06/30 19:16ID:???0388&r
02/06/30 19:28ID:???@set= qw(/root /hoge /root/hoge /root/some/hoge);
for ( @set ){
/^(\/[^\/]+)/ && print $1,"\n";
}
0389nobodyさん
02/06/30 19:45ID:???@set= qw(/root /hoge /root/hoge /root/some/hoge);
@selected = grep { /^\/[^\/]+$/ } @set;
0390&r
02/06/30 19:49ID:???末尾一致させないので $ が要らない罠
0391&r
02/06/30 19:50ID:???マッチ部分の取り出しができていない罠
0392&r
02/06/30 19:52ID:???書くんなら
@selected = map { /^(\/[^\/]+)/ ? $1 : () } @set;
0393&r
02/06/30 20:06ID:???よく読んだらリストの上2つを取り出すってことか。
てっきり勘違いして /root および /hoge ディレクトリを含むパス
のリストを抜き出すのかと思ってた。
0394ororo
02/06/30 22:56ID:???>389の方の答えが望んでた答えっす。
ありがとうございますた。
0397nobodyさん
02/07/01 05:32ID:???@selected = grep m{^/[^/]+$}, @set;
せめてこれくらいの可読性は確保しよう。
grepにブロックを使うのは、どうしても必要な時だけにした方が
いいかもしれない。
0399nobodyさん
02/07/02 00:42ID:icSYdM+Atitle>url って文字列があったとき、
title と url を切り分ける処理をするとします。
ただし、> と < と & と " あたりは &..; に置き換えられてるから
実際は title>;url を処理することに。
で、問題はバックスラッシュによるエスケープを導入するとき
どうしたらいいのかなんですが...
title\>;hoge>;url -> ( title\>;, url )
^(?:((?:\\.|.)+?)>;)?(.*)$
で出来なくてお手上げです。
どうしたらいいんでしょう…
0400nobodyさん
02/07/02 00:55ID:???質問もまともに書けないのか?
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))
でいい気が。
■ このスレッドは過去ログ倉庫に格納されています