正規表現道場@2ch Part2
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/11/24 22:57ID:LrbVcl3Yこのスレは有用そうな正規表現を紹介したり、どう表現したらいいかわからないときに
質問をしたりするためのスレッドです。
質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。
リンクなどは>>2-5のあたりに。
0262260
03/03/09 16:47ID:???0263nobodyさん
03/03/11 10:43ID:V1nwV3pf0と1からなる列で0は偶数回、1は奇数回現れるもの全て。」
わからない…。ていうか可能?
0267名無しさん@Meadow
03/03/11 11:16ID:wliWOweuPerlだしゅ。正規表現じゃないな。
while(<>) {
@zero=m/0/g;
@ichi=m/1/g;
if ($#zero % 2 != 0 and $#ichi % 2 == 0) {
print;
}
}
0269nobodyさん
03/03/11 11:45ID:???どういうこと?原文ままだと
*3.7 次の言語に対する正規表現を書きなさい.
a) 5個の母音a,e,i,o,uがこの順序でどこかに現れる英字列すべて
b) 辞書式順序の関係に従って現れる英字列すべて
(略)
f) 0と1からなる列で,0は偶数回,1は奇数回,現れるものすべて
(以下続く)
「コンパイラI 原理・技法・ツール」(通称ドラゴンブック)ていうやつの練習問題。
0272nobodyさん
03/03/11 16:10ID:???オライリージャパンの「正規表現」って本読んだ。
ちょっと古めなのであれだったけど。
(\4000)
書いてある内容はあれだったけど、
説明のしかたがクソだった。
よくオライリーからあんなクソ説明本が出たもんだ。
読んでる途中で嫌になってくる。
0274nobodyさん
03/03/11 19:10ID:???いや、ただ気になったので。この類の本って問題だけで答えがないってのが
多い気がする。
>>271
「言語」はあるアルファベット(文字集合)からなるものの列をいうっていうようなことが
書いてあるので、たぶんここでは文字列っていうのと同じとみていいと思う。
「言語 受理」で検索するとそれっぽいページが多くヒットするので分野によっては
普通の表現なのかも(「受理」はまぁつまり「マッチが成功する」って言う意味)。
0275nobodyさん
03/03/11 23:48ID:???0278nobodyさん
03/03/12 22:04ID:hmpHRxfR0279nobodyさん
03/03/12 22:31ID:wNWBQmqkたぶんあなたのレベルの問題だと思うぞ。
あと2,3回我慢して読んでみなよ。
0280nobodyさん
03/03/12 22:38ID:???と
.+?
の違いって何ですか??
0281あぼーん
NGNG0285nobodyさん
03/03/13 15:28ID:???(x?) って (|x) の略記法だと思ったんだけど。
だから空にもマッチするんじゃないの?
0286nobodyさん
03/03/13 15:44ID:???その"?"と、>>280の"?"では意味が違います。
>>280の"?"は量指定子(この場合は"+")の後ろにありますので、
これは「最短のマッチを選べ」という指示になります。
結果として、".+?"は「何か一文字」にマッチするということになりますね。
0287山崎渉
03/03/13 16:58ID:???0290nobodyさん
03/03/14 00:04ID:???0291nobodyさん
03/03/14 00:04ID:???0292nobodyさん
03/03/14 00:04ID:???0293nobodyさん
03/03/14 00:05ID:s293/lDl0294nobodyさん
03/03/14 00:23ID:???* +の後ろにくっつけた?は意味が違う。
だから、*? +?で1つのメタ文字として考える方が正しいといえる。
0300nobodyさん
03/03/20 21:24ID:8BKMA1mqちがうよ(ぷ
0301nobodyさん
03/03/21 01:13ID:???0302nobodyさん
03/03/26 17:02ID:4WzRK9Seそのままにしておきたいような場合はどのように表記すればいいんでしょうか?
s{[^(?:&|<|>|")];}{}g とか
s{[^&|<|>|"];}{}g とかやってみましたがうまくいかず。
どなたか助けてください。
0303302
03/03/26 17:16ID:4WzRK9Se文字列の中で、「;」を消したいんだけど「<」や「>」の「;」は
そのままにしておきたいような場合はどのように表記すればいいんでしょうか?
s{[^(?:&|<|>|")];}{}g とか
s{[^&|<|>|"];}{}g とかやってみましたがうまくいかず。
どなたか助けてください。
0305nobodyさん
03/03/26 19:42ID:???0306nobodyさん
03/03/27 01:45ID:lpoVliEYif($FORM{'pass'} =~ /[0-9]pass/)
わかると思いますが、これは$FORM{'pass'}が[0-9]passだったら○○する、という命令なんですけど、
この0から9を0から24にしたいんです。
if($FORM{'pass'} =~ /[0-24]pass/)
これじゃあ0から2と認識されてしまいました。
どうかご教授お願いします。。
0307nobodyさん
03/03/27 02:14ID:DK9B1aQJif($FORM{'pass'} =~ /(1?[0-9]|2[0-4])pass/)
でいいんじゃないかなあ。
0308nobodyさん
03/03/27 02:20ID:DK9B1aQJif($FORM{'pass'} =~ /(\d+)pass/ && $1<24)
とかでもできるかなあ。
0309nobodyさん
03/03/28 10:31ID:q5wWnzii/.{10,}/
こう書いたのですがなんでも10回続けばマッチしてしまう(10文字以上の長さだったらマッチ)
kふぉあsdん@ごあsdんg@おあんう゛ぁ@おsなおさkんが@おsんdg@お
にマッチせず、
あいうえお!!!!!!!!!!!!!!!!
や、
あいうえおあいうえおあいうえおあいうえおあいうえおあいうえおあいうえおあいうえおあいうえおあいうえお
などにマッチさせたいんですが、どういう書き方をすればいいのでしょうか?
どうぞ、よろしくお願いします。
0310nobodyさん
03/03/28 10:45ID:???kふぉあsdん@ごあsdんg@おあんう゛ぁ@おsなおさkんが@おsんdg@お
コレだって10文字以上だろ
人間にとって意味がある文章を洗い出すって意味なら無理
0312309
03/03/29 03:39ID:WGdDwe6jなんらかの文字列がn回以上続く
↓
なんらかの文字列が連続でn回以上続く
「連続」で続いてないとだめなんです。
だから、
kふぉあsdん@ごあsdんg@おあんう゛ぁ@おsなおさkんが@おsんdg@お
は、マッチしません。
あいうえお!!!!!!!!!!!!!!!!
は、「!」が10個以上あるのでマッチします。
あいうえおあいうえおあいうえおあいうえおあいうえおあいうえおあいうえおあいうえおあいうえおあいうえお
は、「あいうえお」が10個以上あるのでマッチします。
こんな表現は無理なんでしょうか?
>>311
これでは無かったです。
単にn文字以上、ではなく、連続で続くとマッチさせたいんです。
0313nobodyさん
03/03/29 11:26ID:???if ( $str =~/(.+)\1/ ) {
print 'OK';
} else {
print 'NG';
}
0314nobodyさん
03/03/29 17:46ID:???0315nobodyさん
03/03/29 18:25ID:???/(.+)\1{N,}/
Nはn - 1で。
0316309
03/03/29 22:08ID:xi1Z4LcN一応サンプル
ttp://thebbs.jp/common/thetop/index.html
連続した文字に反応します。
このようにしたいんですけど。。。
0318309
03/03/31 00:38ID:rrn9gB8/すいません、>>315サソのでいけました!
みなさんどうもありがとう・゚・(ノД`)・゚・
0319309
03/03/31 00:50ID:???0321nobodyさん
03/03/31 18:43ID:???$ascii = '[\x00-\x7F]';
$twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]';
$threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]';
/((?:$ascii|$twoBytes|$threeBytes)+)\1{N,}/
0323Perl
03/04/04 15:20ID:????x (十六進数) {,4} ;
でない #(任意の16文字) にマッチさせるにはどうしたらよいですか。
0324名無しさん@Meadow
03/04/04 23:02ID:???わけわか
人にわかるように書け
0326nobodyさん?
03/04/05 04:37ID:bmLMbrZJ<b></b>タグで挟まれた文字列(レスの名前部分)だけ残す場合、どんな方法がありますか?
$str =~ /<b>([^<]+)<\/b>/; $str = $1;
$str =~ s/.*<b>([^<]+)<\/b>.*/$1/;
ってのはエレガントじゃないですよね
0327nobodyさん
03/04/05 04:47ID:???これじゃだめ?
0330Perl
03/04/05 10:26ID:???0331デフォルトの名無しさん
03/04/05 11:11ID:E+nPGg0Qわけのわかるように書け、といてるのがわからんかな。
(a) /#.{16}/ # '#'に続く任意の16文字じゃ
(b) /?[0-9]{2,4}/ # '?'に続く十進数2個〜4個じゃ
(c) /?(x[0-9a-z][0-9a-z]){,4}/ # '?'に続く十六進数表記0個〜4個じゃ
(a)は、(b)でも(c)でもないから、(a)がおぬしの求める解そのもの
ではないのかの。
(b)も(c)も含まぬ(a)をマッチさせたいのではないのかの。
それなら別の問い方がある。日本語をべんきょし直してこい
0332nobodyさん
03/04/05 14:40ID:7kbMg08sから最後の\n〜\nを消したいのですがどうすればいいですか?
結果的に
\nああああ 2003/6/08\n\nsdfg 2004/9/9\n
というふうにしたいのですが
0333nobodyさん
03/04/05 14:47ID:???0334nobodyさん
03/04/05 16:15ID:???join('\n',(split(/\n/,"\nああああ 2003/6/08\n\nsdfg 2004/9/9\n\nぉいこいjk\n"))[0..3])
こじつけ(w
0335332
03/04/05 17:02ID:7kbMg08s0337Perl
03/04/05 22:53ID:???> (b)も(c)も含まぬ(a)をマッチさせたい
そうです。
質問者の癖に揚げ足を取っとくと、
(C)は [0-9a-fA-F]。
「純粋な正規表現」ではできないのですか?
Perlなら下記でいけそうですが。
/(?<!&)#.{16}/
?(数字); にはマッチしなくて
?(文字); や?(;以外の任意)にはマッチ なんてできませんよね?
0338nobodyさん
03/04/05 23:36ID:???0339nobodyさん
03/04/06 00:32ID:???0340Perl
03/04/06 01:01ID:???同じpc2鯖でもweb製作は使えるのに。
テスト & &です。
&amp; &です。
&# ?です。
0341nobodyさん
03/04/09 16:59ID:???どういう正規表現使ったらいいでしょうか
http://www.din.or.jp/~ohzaki/perl.htm#Mail
を見てみたのですが、ちょっと分かりませんでした…。
言語はまだ未定なのですが、perlでできればいいなと考えてます。
0342nobodyさん
03/04/09 17:12ID:???決まった場所にメールアドレスが来てない?
0344nobodyさん
03/04/09 17:33ID:???そうですね。
OEのメッセージをテキストで保存したものですが、
----↓一行目から----
送信者: <[email protected]>
宛先: <[email protected]>
件名 : テスト
日時 : 2003年4月9日 17:33
--------------------
てな感じになってます。
ヘッダ部分は決まった場所なんですが、
本文中のメアドも消したいんです。
0346nobodyさん
03/04/10 01:00ID:+Bf7VwF40347nobodyさん
03/04/10 01:08ID:???0348nobodyさん
03/04/10 01:58ID:???メールアドレスの正規表現はググればいくらでも見つかるでしょ
どっちみち、perl5.6以前は完全には表せないけどあまり支障はないと思う
0349nobodyさん
03/04/10 03:20ID:vlrWfcuj0350あぼーん
NGNG0351あぼーん
NGNG0352あぼーん
NGNG0353nobodyさん
03/04/11 04:03ID:???もまいらオススメのMail Addressの正当性チェックパターンを是非341に押しえて
ください。
教科書的には
/^[\w\-+\.]+\@[\w\-+\.]+$/i
・・・って事になるかもしれないけど、これだとage@sageでも通ってしまいまふ。
http://www.din.or.jp/~ohzaki/perl.htm#Mailは現実的じゃないし、perl上で@で
splitして要素数数えてから左辺右辺を個別に評価した方が確実なんでしょうけど、
ここは正規表現一発って事でおながいします。
0354nobodyさん
03/04/11 04:18ID:???0356nobodyさん
03/04/11 06:29ID:???0359nobodyさん
03/04/11 13:09ID:???0360nobodyさん
03/04/11 19:44ID:???■ このスレッドは過去ログ倉庫に格納されています