正規表現道場@2ch Part2
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/11/24 22:57ID:LrbVcl3Yこのスレは有用そうな正規表現を紹介したり、どう表現したらいいかわからないときに
質問をしたりするためのスレッドです。
質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。
リンクなどは>>2-5のあたりに。
0206nobodyさん
03/02/21 12:55ID:6n4aSTAx了解です。
楽しようとせずSQL文を完成する前に
ひとつずつ置換えるようにします。
どうもでした。
0208nobodyさん
03/02/21 15:37ID:???0209nobodyさん
03/02/21 22:45ID:Kv1GvIlPそのなかに | があっても大丈夫ですか?
/(2ch\.net|1ch\.(com|org))/
みたいな・・
0211nobodyさん
03/02/21 23:19ID:???えっと・・あとどれをエスケープするんでしょうか?
この場合合致させたいのは
2ch.net
1ch.com
1ch.org
です
0213nobodyさん
03/02/22 10:01ID:???0214nobodyさん
03/02/22 10:12ID:???聞いた方がはやいやーってなっちゃうだろうね。
0216初心者質問者
03/02/22 17:49ID:Db6aP06Cダブルクォーテーション内部だけをマッチさせたいんですけど。
$1使わないと無理?
0219nobodyさん
03/02/24 12:33ID:fQYme6i5ある文字列から始まらない任意の文字列、というのは
どうなって書けばいいんでしょうか。
例えば、<a href...>以外のタグを見つけるといった場合ですが、
文字列a hrefから始まらない、という事で
/<[^(a href)][^>]*>/
という感じかと思ったんですが、これではダメなようなので・・・。
0221nobodyさん
03/02/24 18:51ID:???0222nobodyさん
03/02/24 22:21ID:???/<(?!a href).+?>/
0223nobodyさん
03/03/03 16:51ID:PjU+W5oKなんか「知らんヤツ書くな!!」とかで正しいのかどうか解りません。。
どなたかご教授お願いします。
言語:Perl 掲示板CGIを作っています。
やりたいこと:特定のタグ以外は無効にする。
私が考えた処理は・・・指定したタグの中身に合致しなかったら消す。
@yukotag = "('b'.'/b'.'u'.'/u')";
if ($value ne "<@yukotag>") {
$value =~ s/<(.*)>//g;
}
でもこれではそもそも動かない・・・エラーにはならないけど。
#有効になるべきタグも消えてしまいます・
どうしたらよいのでしょう。
0224223
03/03/03 16:53ID:PjU+W5oKif ($value ne "<(b|\/b)>") {
$value =~ s/<(.*)>//g;
}
0225nobodyさん
03/03/03 16:55ID:???0226nobodyさん
03/03/03 17:27ID:???Perlを基礎から勉強してください。
基本的な考え方は>>225の通り。こんな感じで。
@yukotag = ('a','u');
$value =~ s/<(\/?.*?)>/<$1>/g;
map { $value =~ s/<(\/?$_.*?)>/<$1>/ig } @yukotag;
0227nobodyさん
03/03/05 12:28ID:vWidvRyz$_=~/\n{2,}/g
ではだめれすか?
0229nobodyさん
03/03/05 12:33ID:???$_ =~ /${kaigyou}{2,}/$nanika/g
0230227
03/03/05 12:37ID:???0232230
03/03/05 22:23ID:???if($a=~/\n{2,}/gs){print"OK!\n";}
?????????????????????????????
0234nobodyさん
03/03/05 23:36ID:???おいおい、「改行ニ回」ってそういう意味かよ。
上の回答者はみんな、あんたが「ふたつ(以上)連続する改行」に
マッチさせたがってると思ったんだよ、あんたの質問と例を読んで。
$a = "aaa\nddd\nfff\n";
if(($a =~ s/\n/\n/gs) >= 2) { print "OK!\n"; }
0235230
03/03/06 03:31ID:???激しく反省
0236nobodyさん
03/03/06 03:53ID:???((a.b)(c.d)(e(f(g.hij)))k) -> マッチ
((bcd))) -> だめ。
0238サチ
03/03/08 13:12ID:dLehQyhymy $count = 0;
foreach (@data) {
$count += $com =~/\Q$_\E/;
……
この ~/\Q$_\E/ ってどういう意味なのでしょうか?
厨房的な質問ですみません。
0240nobodyさん
03/03/08 13:20ID:???それは正規表現というよりPerlの作法。
\Q =英数字以外の文字の前に\を挿入する。
\E =\L,\U,\Qなどの終了
print "\Q$_\E";
とかで効果を見たほうが早いかも。
0241サチ
03/03/08 13:32ID:dLehQyhy本当にありがとうございます。
Perlの作法なのですか。
てっきり正規表現かと思ってました。(^_^;
どこかに参考となるURLありますか?
0244サチ
03/03/08 13:37ID:dLehQyhy思いまして… ごめんなさい。
0246サチ
03/03/08 13:54ID:???ありがとうございました。m(_ _)m
0247nobodyさん
03/03/08 14:56ID:???まあ、がんばれよ。
0249nobodyさん
03/03/08 15:13ID:???デスクトップリファレンスで良いかと。
0250nobodyさん
03/03/08 16:20ID:???同じオライリーなら詳説正規表現もお勧めだよ。
0251サチ
03/03/08 18:13ID:???お金がないので諦めました。
詳説正規表現ですか。。φ(..)
0252nobodyさん
03/03/08 20:14ID:???本当に本1冊書けるし、実際に本が出てるんだよね。
それぐらい奥深いものなのかと。
0253nobodyさん
03/03/08 20:38ID:???他にも赤い表紙の奴とか、オライリー以外にも2、3冊ぐらい
正規表現の本を見かけたことがある。
0254177
03/03/08 20:46ID:???0255254
03/03/08 20:47ID:???0256nobodyさん
03/03/08 21:07ID:???あれ勉強してからチューンしたら性能が4割は上った。
はじめは馬鹿にしてたんだけどね。
0257nobodyさん
03/03/08 21:53ID:???正規表現はスクリプトの実行速度に影響を与えていることが
結構あったりしますので、コードチューニングには、いい本です。
しかし、入門には少々マニアックすぎるかも。
# 毒食えば皿までかな。
0258nobodyさん
03/03/09 00:39ID:???Perl5.6以降では(??{})でいけたような。
もはや「正規表現」とは言えないわけだがだいぶ前から
Perlの正規表現は厳密な意味で正規表現じゃないし
0260nobodyさん
03/03/09 12:49ID:9EZ5B9RAaもしくはdという文字列が含まれているかという判定を正規表現で書きたいのですが…
超初心者ですんません。
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と認識されてしまいました。
どうかご教授お願いします。。
■ このスレッドは過去ログ倉庫に格納されています