正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/11/19 21:42ID:Kst3Nn4Sこのスレは有用そうな正規表現を紹介したり、どう表現したらいいかわからないときに質問をしたりするためのスレッドです。
質問するときは使用言語や得たい結果をなるべく詳しく書きましょう。
註:& や " を書くときには、& " と描いておきましょうね。
Perlメモ
http://www.din.or.jp/~ohzaki/perl.htm
正規表現メモ
http://www.kt.rim.or.jp/~kbk/regex/regex.html
Regex::Diagram.pm
http://www.cc.rim.or.jp/~midorin/mad-p/RegexDiagram.html
正規表現
http://www.cc.rim.or.jp/~midorin/mad-p/perl/benkyou/PRC2kRegex/
UNIX正規表現入門 目次
http://www01.u-page.so-net.ne.jp/jc4/hiroyuki/rex_index.html
Regular Expression(Riue ちゃんの正規表現講座) - Index
http://www.sixnine.net/regexp/
ほとんどは↓のリンク集にまとまっています。
正規表現最新リンク集2002
http://www2.famille.ne.jp/~akio1998/l_grep.html
過去スレ
正規表現道場@2ch
http://pc.2ch.net/test/read.cgi/php/996105815/
正規表現道場@2ch Part2
http://pc2.2ch.net/test/read.cgi/php/1038146241/
0039nobodyさん
03/12/09 16:14ID:W6bkuxufgooの辞書から関連語句だけを集めて用語辞典を作りたいので、
「説明文から検索」の機能で抽出した後、
左側に出てきた見出しだけをテキストエディタにコピペして、
単語以外は全て削除したいと思っています。
メモ帳とワードの他にVisual C++があるのですが、
これらで何とかできませんか?
例えば・・・
http://dictionary.goo.ne.jp/search.php?MT=%CE%EB%CC%DA&kind=jn&mode=0
すずき 【鈴木】
姓氏の一。...
すずき-あきら 【鈴木朖】
(1764-1837) ...
すずきいせき ―ゐせき 【鈴木遺跡】
東京都小平市にある旧石器...
すずき-うめたろう ―うめたらう 【鈴木梅太郎】
(1874-1943) ...
上記の場合でいうと、
(半角スペース)【鈴木】・・・から行末まで削除、とか
(全角スペース)―ゐせき(半角スペース)【鈴木遺跡】・・・から行末まで削除、というふうに
とにかく最初のひらがな単語だけを残したいのです。
▼などの記号も混ざっているので、段階を踏まなきゃならないのかなとも思いましたが
「正規表現メモ」とか見ても
どうすればいいのかさっぱりなんです(´д`;
よろしくお願いします。
004136
03/12/09 16:36ID:???>>37さんのをちょっとだけテストさせていただいたところ
どうやら期待通りに動いてくれているようです。
それぞれ何をしているのかを調べながら、テストを重ねさせていただきたいと思います
>>38さんの方は返ってくる値が、>>36で質問した
「今回ぼくがやりたいこと」とは期待していたものとは違ったんですが、
最終的にやりたいことが、
「後々入力されたほかのデータが、登録されているサイトのサーバー上にあるか、
というか、
そのサイト上のデータかどうかを調べる」
ということがしたかったので、ユーザーIDの自分の中での定義など、
なにか考え直す必要があるような無いような、そんな感じがしました。
・・何が言いたいのが良くわかりませんし、やたら長文で読みにくいと思いますが、
兎に角何がいいたいかといいますと、
本当に有難うございました。
0042nobodyさん
03/12/09 16:39ID:???下の書き方だとエラーが出てしまいます。どこか間違ってるんでしょうか?
if ($min =~ ^(\d+)(?(?{$1 % 3})(?!))$){
0044
03/12/09 16:45ID:5gjkqVTXそれを言っちゃあおしめえよ。
0046nobodyさん
03/12/11 14:45ID:jBSAkNSo「XXXXX.html」に置き換えるような処理はどうすればよいでしょうか?
XXXXXが可変です。
0047nobodyさん
03/12/11 14:52ID:???004946
03/12/11 15:14ID:jBSAkNSo初心者なんで、最適化も何もない&さっき質問したのと話がちょっと違うけどお願いします。
文字列に含まれる$img[XXXXX]の中身XXXXXを関数に渡して、その処理結果で置き換える、ということです。
$test = 'aaa <a href="test.pl"><img src="$img[test1]"></a><img src="$img[test2]">';
$test =~ s/(\$img\[)(\w+)(\])/func($2)/ge;
print $test;
sub func{
local($id)=@_;
if($id eq "test1"){
return "test1が渡されたよ";
}
return "test2が渡されたよ";
}
0050nobodyさん
03/12/11 15:38ID:???おおう、いいんじゃない。前後はカッコ要らんけど。
$test =~ s/\$img\[(\w+)\]/func($1)/ge;
0051nobodyさん
03/12/11 21:09ID:???if ($min =~ /^(\d+)(?(?{$1 % 3})(?!))$/){
=~の右辺は正規表現だから、m/正規表現/、その省略形、/正規表現/
0052nobodyさん
03/12/11 21:11ID:???0053nobodyさん
03/12/14 11:28ID:9SKP9sfiここの2ページ以降の正規表現おしえてください
0054nobodyさん
03/12/14 12:18ID:???0055nobodyさん
03/12/14 12:19ID:9SKP9sfihttp://www.big.or.jp/~talk/t-club/soft/mini_r6/index.cgi
この掲示板の2ページ目、3ページ目のURLが
知りたいんですが、どのページも同じURLなんです・・・・
2ページ目はどうやれば指定できるんでしょうか?
何か元になるURLに付記すればいいのでしょうか?教えてください・・
0056nobodyさん
03/12/14 12:29ID:9SKP9sfihttp://cgupload.dyndns.org/~upuser/up2/imgboard.cgi
この掲示板の2ページ目、3ページ目のURLが
知りたいんですが、どのページも同じURLなんです・・・・
2ページ目はどうやれば指定できるんでしょうか?
何か元になるURLに付記すればいいのでしょうか?教えてください・・
0058nobodyさん
03/12/14 12:55ID:???0060nobodyさん
03/12/14 12:59ID:???0061nobodyさん
03/12/14 13:01ID:9SKP9sfiしてねーよ妄想野郎
0062nobodyさん
03/12/14 13:02ID:???0063nobodyさん
03/12/14 13:05ID:???◆HTML講座(Web製作板)
http://pc2.2ch.net/test/read.cgi/hp/1010398268/
0064nobodyさん
03/12/14 13:10ID:9SKP9sfiそこでおしえてくれ
0065初心者
03/12/15 04:53ID:llm//hKNが分からないのですが、[@]wordではないし、どうなるのでしょうか。
0067nobodyさん
03/12/15 06:14ID:???0068nobodyさん
03/12/15 09:03ID:???006968
03/12/15 09:05ID:???なんで正規表現でやる必要があるのかよく分からんが。
0070nobodyさん
03/12/15 10:25ID:8LAW+/sT一つの正規表現に拘る必要はないと思うが、、、?
条件分岐だとして例えば
if($key_word=〜/@/ || $key_word=〜/word/){〜以下実行文
では駄目なのかな?
0071nobodyさん
03/12/15 10:31ID:???Read Only Member : 書き込まない利用者。
0074nobodyさん
03/12/15 14:41ID:???0075nobodyさん
03/12/15 23:09ID:8LAW+/sT70は間違ってはいないよ、不充分かも知れんが。
そもそも65の質問がどういうシチュエーションでどういう動作の目的でどういうマ
ッチングをさせたいのかを詳細に述べていないという不充分な訊き方なので、70のよ
うな「充分用を足すかどうかは保証の限りではない」当たり障りのない答えが返って
きても当然だと思うが。
70の記述で取り敢えず「@」「word」が含まれていれば、その含まれている最初
の箇所マッチする。 複数含まれていて、それを全てマッチさせるのか、n回目まで
マッチさせるのかなどでオプション等の補助的記述が必要になって来るし、「含まれ
ている」ではなく「その単語そのもの独立だけに厳密マッチ」させるのならが、また
違う話になってくる、それをイチイチ説明していたら解説書になってしまう、それは
自分で読んでくれってことになる。
0076nobodyさん
03/12/16 09:10ID:???0078nobodyさん
03/12/16 16:12ID:???0080nobodyさん
03/12/18 18:53ID:zzUoxnBBX25.125
X12.1
X78.
でなく
X25
X789
にマッチさせたいんです。
御多忙中の所、誠に恐縮では御座いますが、
御教示いただければ幸いです。
0083nobodyさん
03/12/18 19:11ID:zzUoxnBBXは無視してもらっていいです。
0084nobodyさん
03/12/18 19:27ID:???$hoge = "a(b(c))";
の時に、$hoge =~ m/(.*)\((.*)\)/
とすると、$1は"a(b"で、$2は"c)"になりました。
つまり文末から見ていることになるのですが、これを
$1は"a"で、$2は"b(c)"になるようにするにはどうすればいいでしょうか。
よろしくお願いします。
0085nobodyさん
03/12/18 19:36ID:???それは文末から見ているんじゃない。. は ( も含むから
最初の .* が一番長くマッチできるところまで取り込んでいるだけ。
/([^)]*)\((.*)\)/ か /(.*?)\((.*)\)/ かこの辺↓参照。
http://www.din.or.jp/~ohzaki/regex.htm#GetNestedParen
0087nobodyさん
03/12/18 20:34ID:???0088nobodyさん
03/12/18 21:08ID:zzUoxnBB例えば
10.
10.01
10
のうち、全ての"10"を拾います。 上記3つの数値のうち小数点を含まない
10(3つ目)のみにマッチさせたいんです。
0091nobodyさん
03/12/19 06:15ID:z9mYPuUz0092nobodyさん
03/12/19 08:15ID:tSEWBAlW小数点を含まない数値にマッチさせるパターンを教えて下さい。
X25.125
X12.1
X78.
でなく
##X25##
##X789##
にマッチさせたいんです。
御多忙中の所、誠に恐縮では御座いますが、
御教示いただければ幸いです。
009339
03/12/19 10:20ID:???自力で検索したサイトは難しい所ばかりだった気がしたのですが、
>>1のリンク先を一通りち回って、今回は何とかなりました。
たぶん答えるのもアホらしい低レベルな質問だったんでしょうね。
スレ汚し失礼しました。
0094nobodyさん
03/12/19 13:04ID:???0096nobodyさん
03/12/19 23:48ID:???0097nobodyさん
03/12/21 14:45ID:???お前さんのレベルじゃ,
込み入った正規表現に手を出すのはまだ早いんじゃないか?
とりあえずわかりやすい代替手段でも使っておけ。
my $f = 'fs4.5s5d.af56.156asd';
my @res = ();
foreach ( split(/[^\d.]/, $f) ){ push( @res, $_ ) if(/^[\d]+$/); }
if(! scalar(@res) ){ print "no match!\n"; }
elsif( scalar(@res) > 1 ){ print "too much match!\n"; }
else{ print "matched:[$res[0]]\n"; }
0098nobodyさん
03/12/21 23:40ID:qD9UdeKRnyのキー情報(↑みたいなの)を正規表現で表すことできますかね?
ダウソ板のスレを全部取り込んで、
キー情報だけ抜き出してリストを作りたいです。
0099nobodyさん
03/12/22 00:11ID:???0101nobodyさん
03/12/22 02:02ID:???0102nobodyさん
03/12/23 15:26ID:???からも
xxx.xxxx.ap.so-net.ne.jp
からもプロバイダ名を抽出させる方法を教えてください。
0103nobodyさん
03/12/23 18:11ID:???と
(\S+\.)?\S+\.[a-zA-Z]{3}
俺にはこんなものしか思いつかねーよ
0104nobodyさん
03/12/23 19:52ID:???ASAHIネットは www.ne.jp というホスト名を持っているわけだが、
ここからASAHIネットだと特定できる文字列をどうやって抽出しようかねぇ?
/
(?:
([0-9A-Za-z](?:[\-0-9A-Za-z]*[0-9A-Za-z])?) # 3rd LD
\.
)?
([0-9A-Za-z](?:[\-0-9A-Za-z]*[0-9A-Za-z])?) # 2nd LD
\.
([A-Za-z](?:[\-0-9A-Za-z]*[0-9A-Za-z])?) # TLD
\.?$
/x
0106nobodyさん
03/12/24 14:10ID:???2ch.netを取得したいと仮定して答えても問題ないかな?
0109nobodyさん
03/12/25 19:44ID:???[-0-9a-zA-Z]+.[-0-9a-zA-Z]+$
多分[-0-9a-zA-Z]じゃ足りないけどよく分からないので。識者よろ
0110nobodyさん
03/12/25 19:55ID:???0111nobodyさん
03/12/25 20:51ID:???<q cite="http://member.nifty.ne.jp/moha/rfc/rfc2396j.txt">
hostname = *( domainlabel "." ) toplabel [ "." ]
domainlabel = alphanum | alphanum *( alphanum | "-" ) alphanum
toplabel = alpha | alpha *( alphanum | "-" ) alphanum
</q>
=> >>104
0112nobodyさん
03/12/25 21:14ID:???後ろから二つ目の.まで
hogehoge.ne.XXのように.の後が2文字なら
後ろから三つ目の.まで
.XXXのXがすべて\dならIPアドレスということで全部
とでもしておけばいいんじゃない?適当すぎですが
0115nobodyさん
03/12/26 13:51ID:icJ7Wsig$_ = << "EOD" ;
<test>
<test2>abc</test2>
</test>
<test>
<test2>def</test2>
</test>
EOD
/(<test>.+<\/test>)/s ;
print "$1\n" ;
テキスト中にある<test>文字列</test>を抽出したいと思ってるんだけど、
結果はこうなってしまう。
<test>
<test2>abc</test2>
</test>
<test>
<test2>def</test2>
</test>
結果はこうなって欲しい。
<test>
<test2>abc</test2>
</test>
こんな事も試したけどうまくいかず・・・
/(<test>(?!<test).+<\/test>)/s ;
何方か、お助け。
0117nobodyさん
03/12/27 16:00ID:???のような感じのテキストで[hoge]以外の[と]で囲まれている部分を消して
〜〜[hoge]〜〜〜〜〜〜〜
のようにしたいのですが、hoge以外の場合マッチという方法が思いつきま
せん。[^hoge]で無いことは確かなんですが・・。
文字列の否定の方法をどなたか教えてくださいませ。
0118nobodyさん
03/12/27 17:39ID:???s/\[(?!hoge)[^\]]*\]//g;
http://www.din.or.jp/~ohzaki/regex.htm
0120初心者スレ902,904
03/12/29 16:56ID:???http://pc2.2ch.net/test/read.cgi/php/1069846177/902-
こちらから誘導されてきました。
再度質問を書きます
あるスクリプトで
my $check = '(?:^|[\0-\200\240-\337])(?:[\201-\237\340-\374]{2})*';
$FORM{'FROM'} =~ s/($check)(?: | )+$/$1/g;
というのがあったのですが、"?:"というのはどういう意味なんでしょうか?
(このスレでも"?:"という表現が使われていますね)
ttp://www.kt.rim.or.jp/~kbk/perl5.005/perlre.html
ここも見てみたのですが、いまいち意味が分かりませんでした。
教えてもらえると助かります。
0121初心者スレ902,904
03/12/29 17:03ID:???ttp://www.kt.rim.or.jp/~kbk/regex/regex.html#GROUPING_NOBR
ここを読んだら分かりました。
0122nobodyさん
03/12/31 18:09ID:9hwbEMBW/#{str1}/.match(str2)
としたときstr1のメタ文字を通常の文字としてマッチさせたいのですがどうしたらいいですか?
0125nobodyさん
04/01/07 22:03ID:3+H2s8ZL<dt>クソスレみっけ<><>03/12/30 00:57 ID:o9NEl4Ao<dd>じしんないから3で <br>
とあって、空タグの<>間にある文字列を
<dt><a href="mailto:sage">[名無し]さん(bin+cue).rar</a> 03/12/30 00:57 ID:St9M3KSl<dd>2 <br>
<dt><a href="mailto:">クソスレみっけ</a> 03/12/30 00:57 ID:o9NEl4Ao<dd>じしんないから3で <br>
のように<a>に内包させたい場合どうしたらよいでしょうか
テキストエディタは秀丸を使っています
0126nobodyさん
04/01/07 22:21ID:???置換ダイアログで
検索: <dt>\f[^<]*\f<>\f[^<]*\f<>
置換: \0<a href="mailto:\3">\1</a>
0128nobodyさん
04/01/08 11:30ID:A5R/iNdF<…>となっている不等号はHTMLタグとみなして、そのままにしておき
それ以外のHTMLタグとみなせない不等号を&lt;と&gt;に置き換えて
HTMLタグ内にない”と&をそれぞれ&quot;と&amp;に変換するように
正規表現を書きたいのですが色々書き直して試してますが
思い通りに動作しなくて困ってます。
どのように正規表現を書けばよいか知恵を貸してください。お願いします。
<…>の形になってない不等号を&lt;と&gt;に置き換える作業は今は
以下のようになってます。
$message = @ereg_replace("<(([^>]|\n)*)<", "&lt;\\1&lt;", $message);
$message = @ereg_replace("<(([^>]|\n)*)", "&lt;\\1", $message);
$message = @ereg_replace("(([^<]|\n)*)>", "\\1&gt;", $message);
正規表現のせの字もわからんような状態から何とかあちこち検索かけてここまで作りました。
しかし、まだ正規表現のありがたみが足りない気がして、不満です。
よければもっと要約できる点、あるいは不備な点の指摘をお願いします。ちなみに、書き込みのためにここでは全角でインデントいます。コピペの際にご留意下さい。
#-----------------------#
# UA一般名化 #-----------------------------------------------------#
#-----------------------#
# 引数は、($ENV{'USER_AGENT'})
sub envUa2uaName{
my ($UA) = $_[0];
if($UA =~ /MSIE/){
$UA =~ s/(.){0,}MSIE ([0-9]{1,}(\.){0,}[0-9]{0,})(.){0,}/InternetExplorer $2/;
}
elsif($UA =~ /Opera/){
$UA =~ s/(.){0,}Opera(.)([0-9]{1,}(\.){0,}[0-9]{0,})(.){0,}/Opera $3/;
}
elsif($UA =~ /Safari/){
$UA =~ s/(.){0,}Safari(.)([0-9]{1,}(\.){0,}[0-9]{0,})(.){0,}/Safari $3/;
}
elsif($UA =~ /Netscape/){
$UA =~ s/(.){0,}Netscape(.)([0-9]{1,}(\.){0,}[0-9]{0,})(.){0,}/Netscape $3/;
}
elsif($UA =~ /Firebird/){
$UA =~ s/(.){0,}Firebird/Firebird/;
}
elsif($UA =~ /^Mozilla/){
$UA =~ s/Mozilla\/([0-9]{1,}(\.){0,}[0-9]{0,})(.){0,}/Mozilla $1/;
}
$UA =~ s/([a-z A-Z 0-9]{0,})\/([0-9]{1,}(\.){0,}[0-9]{0,})/$1 $2/g;
return $UA;
}
0132nobodyさん
04/01/13 18:12ID:???0134nobodyさん
04/01/13 19:00ID:???0136nobodyさん
04/01/13 19:07ID:???0138nobodyさん
04/01/13 19:46ID:???■ このスレッドは過去ログ倉庫に格納されています