正規表現道場@2ch Part2
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/11/24 22:57ID:LrbVcl3Yこのスレは有用そうな正規表現を紹介したり、どう表現したらいいかわからないときに
質問をしたりするためのスレッドです。
質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。
リンクなどは>>2-5のあたりに。
0413nobodyさん
03/04/26 00:57ID:IuuTGNpAメアドの正規表現ってこんな感じでいいの(初心者でつ)?
0415nobodyさん
03/04/26 13:56ID:???[^@]+@[a-zA-Z0-9\-_]\.[a-z]{,3}
0416nobodyさん
03/04/26 19:14ID:???0418nobodyさん
03/04/26 19:28ID:???0419nobodyさん
03/04/26 20:02ID:???無かった事にしてくれ。
(でも、確かRFC的には許容内なんだよな。鬱)
0420nobodyさん
03/04/26 21:59ID:???RFCに適合するかどうかのチェックなら厳密にやらなければならないし、
実際には許されない架空のアドレス風味を表すだけなら簡単だし。
0421nobodyさん
03/04/27 01:10ID:???0422nobodyさん
03/05/07 01:48ID:U7blGvbH基本的には\が重なること以外にはPerl5と同じはずです。
これ↓を
SELECT * FROM MEMBER WHERE {NAME='[personName]' AND }AGE=[age]{ AND TEL='[tel]'} ORDER BY AGE;
こういう風に
SELECT * FROM MEMBER WHERE AGE=[age]{ AND TEL='[tel]'} ORDER BY AGE;
変換したいのですが下記ではだめなのでしょうか。
/\\{.*?\\[personName\\].*?\\}//
0424nobodyさん
03/05/07 03:09ID:???@よりもあとを正引きしてMXレコードがあるかどうか
調べるとかどう?
0425nobodyさん
03/05/07 03:11ID:???MXレコードがあるかどうかだけ調べてみるとか
DNS鯖とか落ちてたら登録拒否できるから
確認のメール送る場合とか結構有効じゃない?
0427見習い中
03/05/07 09:46ID:l7Gf5uMD今、正規表現を使って半角英数字のチェックを行っているのですが、
入力テキストエリアに半角英数字が入力されたら、エラーを出すように
したいのですが、
if ($in{'name'} !~ /[a-zA-Z0-9\-]+/ ) { &error("エラーです"); }
としたところ、半角英数字はエラーを返すのですが、
全角英字大文字(ABC)と全角数字(123)も反応してしまいます。
(ToT)...
全角英字小文字(abc)は反応しませんでした。。
半角英数字の入力のみエラーを返したいのですが、どなたか教えてください。
0428あぼーん
NGNG0429nobodyさん
03/05/07 10:52ID:???もしかしてAだけの入力ならうまく動作しませんか?
バイナリエディタを使ってABC周辺のバイトコードと
abc周辺のバイトコードを比較してみましょう。
0430427
03/05/08 12:05ID:0MiTKfYxいろんなサイトを調べてみたら、こんなのがあってやってみました。
jcode::convert(\$in{'name'}, 'euc');
if ($in{'name'} !~ /^[\xA1-\xFE][\xA1-\xFE]+$/ ) { &error("エラーです"); }
とやったら、うまくいきました。(全角文字以外はエラーを返します。)
jcode.plの力ということでしょうか。。。プログラムは奥がふかいです。。。
0432nobodyさん
03/05/10 18:06ID:/HHBMizpニュースサイトからアンカータグの部分だけを取得してくるスクリプトを
書いていたのですが、htmlソースの一行の中に複数のアンカータグがあった場合、
その全てをきれいに抽出できないのです。例えば、抽出したい元のソースが
<a href="http://aaa.com/">あああ</a>、<a href="http://iii.com/">いいい</a><br>
のようになっていたとして、正規表現でそれぞれのタグにマッチングさせようとしても何故か
『<a href="http://aaa.com/">あああ</a>、<a href="http://iii.com/">いいい</a>』か、
『<a href="http://iii.com/">いいい</a>』だけか、
『<a href="http://aaa.com/">あああ</a>』だけといったようにしか抽出できず、
純粋に
『<a href="http://aaa.com/">あああ</a>』と『<a href="http://iii.com/">いいい</a>』
の2つを取り出せないのです。
拙いながらこのようなことを散々試したのですが……。
while( $list =~ /<a\s.*href="{1}?.*"{1}?.*>{1}?.*<\/a>{1}?/g )
{
print $&;
}
どなたか、助言していただけませんでしょうか。
0433432
03/05/10 18:09ID:???0434nobodyさん
03/05/10 19:16ID:???0435nobodyさん
03/05/10 19:44ID:???マイナス25点ってとこだな。なぜマイナスかと言うと、使うと損するくらい
まともに処理できてないからな。
まア、80点以上が出たらわたしのほうから正解を書くとしよう。
0436nobodyさん
03/05/10 20:18ID:???0440nobodyさん
03/05/10 23:28ID:???HTML::LinkExtor->new(
sub {
my ($tag, %attr) = @_;
push @links, values %attr;
}
)->parse(\$list);
print "$_\n" foreach @links;
0441nobodyさん
03/05/10 23:40ID:???print "$1,$2\n" while $list =~ m#<a href="([^"]+)">([^<]*)</a>#ig;
これで妥協して。
0442nobodyさん
03/05/11 00:24ID:???0443nobodyさん
03/05/11 00:41ID:???0445センスのない432
03/05/11 07:00ID:???name="" id="" class="" target="" 等が入った場合にも対応できたので、
とりあえずこれで良しとします。ありがとうございました。>434-444
0446405
03/05/11 10:38ID:QXPmJshpm#<a.+?\s*href\s*=.+?\s*>#ig
あたりでどう?
<a name="" target="" href="http://hoge">
ってケースもある。
0448nobodyさん
03/05/11 12:33ID:???0449nobodyさん
03/05/11 14:25ID:QXPmJshpいいよ
0450nobodyさん
03/05/11 15:26ID:???read(FILE, $doc, -s FILE);
while( $doc =~ m|<a.*?/a>|isg ){
my $temp = $MATCH;
$temp =~ s/\n//g;
print $temp,"\n";
}
close FILE;
0451435
03/05/11 16:12ID:???<applet><a href="hoge">abc</a>
<address><a href="hoge">abc</a>
<area><a href="hoge">abc</a>
あらゆる可能性も考慮しないと・・・30点
0452nobodyさん
03/05/11 16:24ID:???my @tag = $_ =~ m/<a([^>]).>/g;
@uri = map{ m/($http_regx)/; $1; } @tag;
}
$http_regxは自分で調べること
0453nobodyさん
03/05/11 17:16ID:???{
my @tag = $data =~ m/<a([^>].)>/g;
@uri = map{ m/($http_regx)/; $1; } @tag;
}
0454nobodyさん
03/05/11 17:23ID:???0460435
03/05/11 18:07ID:???0461456
03/05/11 18:10ID:???その「念」てなんだよ。点数出すからには採点基準を示せよな。
parse 対象となる HTML の DTD も示せ。BNF でも構わん。
それができないのならこんなの不毛なだけだ。
0462nobodyさん
03/05/11 18:14ID:???my @list = $data =~ /<a(?:[^>]+)?>/g;
@uri = map{ $_=~ /href="?($http_regex)"?/; $1; } grep{/href="?($http_regex)"?/} @list;
0463459
03/05/11 18:17ID:???ごめん、俺は435じゃない。
ネストしないんだからアレでイイと思うんだけど、
ニュースサイトがvalidなHTMLを書いていることは少ないから
「年」って行っただけぽ。
0464435
03/05/11 18:21ID:???s/<!--.*-->//gs; # 前処理
@gets= $_=~ m!<A\s[^>]*?\bhref=.+?</A>!gsi;
どうだ、、、これで確実に「ゲッツ!」しろYO!
0466435
03/05/11 18:29ID:???>>432嫁
s/<COMMENT>.*</COMMENT>//gs;
s/<!--.*-->//gs;
@gets= m!<A\s[^>]*?\bhref\s*=.+?</A>!gsi;
こんなのがもっと堅実かもな
0467435
03/05/11 18:30ID:???s/<COMMENT>.*</COMMENT>//gsi;
0468435
03/05/11 18:36ID:???s!<COMMENT>.*</COMMENT>!!gsi;
まったくつくづくだな
0469456
03/05/11 18:44ID:???0470あぼーん
NGNG0471435
03/05/11 18:51ID:???だから、<a name="hoge"></a>
とか
<!--<a href="hoge">--><a href="hoge">abc</a>
とかも考慮すると>>456は68点だな。
採点基準は漏れの直感だ
0472nobodyさん
03/05/11 18:54ID:???s/<!--(?:(?!-->).)*-->//ig;
s/<COMMENT>(?:(?!<\/COMMENT>).)*<\/COMMENT>//gsi;
@gets = m/<a[^>]+href=[^>]*>(?:(?!<\/a>).)*<\/a>/gsi;
0474nobodyさん
03/05/11 18:58ID:???結局イチャモンつけたいだけか・・・
0475435
03/05/11 19:01ID:???<area href="url">ってタグあるの知ってる?
0476456
03/05/11 19:03ID:???お前、どっか逝け。
0477nobodyさん
03/05/11 19:03ID:???じゃ、これでいいんでは?
0479435
03/05/11 19:08ID:???それじゃ進歩しないぞ。ここは道場だからな。ビシビシいくぞ!
馴れ合いスレじゃないからな。
もちろん漏れが書いたのもまだ不完全なのかも知れん。つっこみどころが
あればつっこんでもっといいものを出せばいいんだ。
0480あぼーん
NGNG0481456
03/05/11 19:14ID:???じゃあ意味の無い点数なんて付けるな。
第一、処理対象となる HTML がどんな仕様なのか前提があいまいで、
あとからコレはダメだアレはダメだなんてのは、
単にいちゃもん付けたいだけとしか思えん。
だったら最初から parse 対象 HTML を全て提示しとけ。
0482435
03/05/11 19:21ID:???いちいち見ず知らずの漏れが付けた点数に反応してどうするよ。
おかしいと思えば無視しろよ。
HTMLの仕様は決まってるだろ。今まで書いたことがいちゃもんだといわれ
ても、漏れがやってるプログラミングの世界ではあらゆる状況を考慮しないと
とんでもないバグになってしまうから、まア職業病だと思ってくれ。
0483456
03/05/11 19:28ID:???> HTMLの仕様は決まってるだろ。
だから漏れが <a> はネストしないって言ったら、 >>457 と言う。
だったらお前の脳内HTML仕様を提示しろと言ってるんだYO!
とんだ職業病だな。
0485nobodyさん
03/05/11 19:45ID:???だから、わざと冗長な正規表現をかいただけのはなしだが・・・
^^^^^^
手前ルールでやられりゃ、腹も立つやろうなぁ・・・
0486あぼーん
NGNG0487nobodyさん
03/05/11 20:20ID:???0488名無しさん@Meadow
03/05/12 07:34ID:???486みたいな香具師は2chでは普通ですが、何か。
0490nobodyさん
03/05/12 09:37ID:???0492nobodyさん
03/05/12 10:28ID:85k2ng51ここまでやるってのはどう?
/<(?:!(?:--[\s\S]*?--\s*)*(>)\s*|(?:script|style|SCRIPT|STYLE)[\s\S]*?<\/(?:script|style|SCRIPT|STYLE)>)/isg;
0493nobodyさん
03/05/12 10:47ID:???iつけるんなら、
/<(?:!(?:--[\s\S]*?--\s*)*(>)\s*|(?:script|style)[\s\S]*?<\/(?:script|style)>)/isg;
これでいいんでない?
[\s\S] って .でいいんちゃうかな?
0494nobodyさん
03/05/12 10:53ID:85k2ng51そうだね、指摘サンクスコ(・∀・)
漏れのソース、i付いてなかった(;´Д`)
0495nobodyさん
03/05/12 10:54ID:85k2ng51ありとあらゆるサイトのコメント入りHTML食わせてみたけど、
まず間違いなく削除してくれる。
100%ではないかもしれないけど。
0496あぼーん
NGNG0497nobodyさん
03/05/12 22:56ID:???0498nobodyさん
03/05/19 22:15ID:pDSpAcPJ正規表現はどう書けばいいのでしょうか。
たとえば下のフルパスからhttpd.confだけを取り出すような場合です。
C:\Program Files\Apache Group\Apache\conf\httpd.conf
0499あぼーん
NGNG0501あぼーん
NGNG0502nobodyさん
03/05/19 22:58ID:???perlなのですがエラーになりました。
-----test.pl------
my $path = $0;
$path =~ \\([^\\+])$;
print "\$path :\n";
print "$path\n";
----------------
0504nobodyさん
03/05/19 23:23ID:???$a='C:\Program Files\Apache Group\Apache\conf\httpd.conf';
($_)=$a=~ /^.+\\(.+)$/;
print;
0505nobodyさん
03/05/19 23:26ID:???すいません。
改めて試しましたがファイル名test.pが取得できません。
-----test.pl------
my $path = $0;
print "$path\n";
$path =~ /\\([^\\+])$/;
print "\$path :\n";
print "$path\n";
----------------
0506500
03/05/19 23:33ID:???× \\([^\\+])$
○ \\([^\\]+)$
>>505
typoに関係なくそのスクリプトは間違っている。
もう一回本読め。
0507nobodyさん
03/05/19 23:42ID:???さっそく試してみました。
しかしフルパスが入ります。
環境は98です。
-----test.pl------
my $path = $0;
print "$path\n";
$path =~ /^.+\\(.+)$/;
print "\$path :\n";
print "$path\n";
----------------
>>506
ダメでした。
スクリプト自体が間違っていますか?
-----test.pl------
my $path = $0;
print "$path\n";
$path =~ /\\([^\\]+)$/;
print "\$path :\n";
print "$path\n";
----------------
0510nobodyさん
03/05/19 23:52ID:???0512nobodyさん
03/05/20 00:33ID:???500へのお礼を忘れてました。
確かに拾えます。
ですがまだ不具合があるので両方の正規表現を使って試している最中です。
-----test.pl------
my $path = $0;
print "$path\n";
($_)= $path =~ /\\([^\\]+)$/;
print "\$path1 :\n";
print "$_\n";
$a='C:\Program Files\Apache Group\Apache\conf\httpd.conf';
($_)=$a=~ /^.+\\(.+)$/;
print;
----------------
0513nobodyさん
03/05/20 00:38ID:???■ このスレッドは過去ログ倉庫に格納されています