正規表現道場@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/
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:???0140未承諾広告※ ◆aiY4htt2.2
04/01/13 21:12ID:???と聞こえてくるのは幻聴でしょうか。。。
0141nobodyさん
04/01/13 22:04ID:???0142nobodyさん
04/01/14 08:50ID:???0143nobodyさん
04/01/15 16:48ID:???mb_ereg("正規表現|ない|or|しょう",$text);
//"|" は二つだけですよね?
こんな感じで、複数の文字列にヒットする方法を知りませんか?
eregでもpreg_matchでもどちらでも可能であれば教えて下さい。
0144nobodyさん
04/01/15 17:23ID:???0148nobodyさん
04/01/15 21:38ID:Z1eTG8w5アクセス制限はPerlではできないかと思いますが、
これらを正規表現にてなんとか綺麗にかけないもの
でしょうか。
もしも良い案がございましたらご教授ください。
0152nobodyさん
04/01/16 17:53ID:???あいうえお\r\n
かきくけこ\r\n
\r\n
さしすせそ\r\n
たちつてと\r\n
naninuneno\r\n
\r\n
歯皮膚へ補\r\n
\r\n
かきくけこ\r\n、naninuneno\r\n、歯皮膚へ補\r\nにマッチして欲しいんですが・・・。
0154nobodyさん
04/01/16 20:49ID:???(?:\n?)[^\r\n]+\r\n(?=\r\n)
0155未承諾広告※ ◆aiY4htt2.2
04/01/16 22:03ID:???手抜きかも。。。
0156nobodyさん
04/01/16 22:45ID:???0158nobodyさん
04/01/18 20:18ID:???「(文字列 ほげ か、文字列 ふが)が先頭にある文字列以外にマッチする」という正規表現はどのようにすれば記述できるでしょうか?
/(([^ほ][^げ])|([^ふ][^が])).*/
かと思ったのですが、違うようです……
0160nobodyさん
04/01/19 14:48ID:UUNY3/Bm$domainにドメインが入っていて、(仮にyahoo.co.jp)
$hogeに入力されたURLが入っているときに
$hogeがルートディレクトリから2つ以上掘り下げた場所にあるファイルのURLなら、ある処理をする
ということをしたいのですが、頭の中ではまとまっていてもどのようにすればいいのかが・・。
ちょっと解りにくいと思うので、具体的に$hogeが何ならokで何ならNGかを↓
○ http://yahoo.co.jp/
○ http://yahoo.co.jp/xxx
○ http://yahoo.co.jp/xxx/
○ http://yahoo.co.jp/xxx/top.html
× http://yahoo.co.jp/xxx/yyy/
× http://yahoo.co.jp/xxx/yyy/zzz/...../foo.html
・
・
こんな感じです。
ネックとしてはディレクトリの時「/」をつけてる場合とそうでない場合がある。
index.htmlなどを書く場合とそうでない場合がある。
というところでしょうか。
で、マッチした場合に処理するという形で考えてるんですが、
if ($hoge =~ /^https?:\/\/\Q$domain\E\/([^\/]+)\/※/) { 処理 }
※の部分にスラッシュがあるか、なくてもドットがなければマッチ
という風にすればいけるのかな?などと考えているのですが、
どのように書けばよいのかが解りません。また本当にそれで実現できるのかも「?」です。
わかりにくい質問だとは思いますが、教えていただけませんでしょうか。
0161nobodyさん
04/01/19 15:22ID:???厳密なこと言うと /xxx/yyy がディレクトリかファイルかは、
実際にその URL にアクセスしてみないとわからないので、
どっかで妥協しないといけないと思う。
で、 >>160 のような前提でマッチするとするなら、こんな感じかな。
$hoge =~ /^https?:\/\/$domain\/([^\/]+)\/([^\/]+\/|[^\/\.]+$)/
0162nobodyさん
04/01/19 15:33ID:???有難うございます。確かに厳密にはそうですが、まぁここではそこまで突っ込まないことにします。
で、少し書いていただいたソースでテストしてみましたが、おそらく期待通りのようです。
後でまたテストしてみます。有難うございました。
0163158
04/01/20 00:19ID:???プログラム自体が「設定ファイルに記述した正規表現(のリスト)にマッチしたら」っていう処理なんで、
>逆に、「〜にマッチしなかったら」という処理にした方が楽。
とは分かってるんですが、何とかならない物かと。
……あや、PHPでも '?!' は使えるのか。ってことは、
/^(?!ほげ).*/
で、「文字列 ほげ が先頭にある文字列以外にマッチ」になるのか?
としても、
/^((?!ほげ)|(?!ふが)).*/
じゃないよなぁ……。
0164nobodyさん
04/01/20 03:08ID:???0167nobodyさん
04/01/20 08:28ID:???0168nobodyさん
04/01/20 17:57ID:???長期滞在は精神衛生上よろしくありませんので、あくまでピーピングってください。
0169158
04/01/21 03:02ID:???申し訳ないです。数時間色々試して、「正規表現でそういうのは無理」
と思いつつもつい、知ってる人がいれば良いな程度に書き込んでしまいました。
(「無理」って思ったんなら諦めろよ、俺。)
処理の方いじってみる事にします。(とりあえず、当面質問スレには出向かない方向で。)
ありがとうございました。
0170nobodyさん
04/01/21 06:51ID:???気持ち悪いです。
0171nobodyさん
04/01/21 07:45ID:???0172nobodyさん
04/01/21 15:39ID:???preg_match('/(?:(?!^(foo|bar)).)*/', $str, $arr); if ($arr[0]) do;
これが正規表現でやることか?
つーか>>1のサイトくらい見ろよハゲ
0173nobodyさん
04/01/25 15:45ID:???<a href="#epigraph">▲</a> <a href="#D_20040124">▼</a>
を、
<a href="#D_20040124">▲</a> <a href="#epigraph">▼</a>
と、属性値だけ入れ替えるにはどうしたらよいのでしょうか?(属性値は可変です)
正規表現は苦手で、いくら考えても判らなかったので……。
0174nobodyさん
04/01/25 16:16ID:???こういうことなんかな? 意図がわからんからめちゃくちゃ適当なんだが。
0175nobodyさん
04/01/25 16:27ID:???できました! そっか、こういう風にすれば良かったのか……。
今度からは自分でできるように、正規表現についてしっかり勉強しようと思います。
ありがとうございました。
0176nobodyさん
04/02/03 02:35ID:dCMf0k2c0177nobodyさん
04/02/09 22:07ID:9171cO3Sa.b.c.d/8
とか
a.b.c.d/32
ってどういう意味なんでしょうか?
誰か教えてください…
0179nobodyさん
04/02/10 18:53ID:???PerlでHTMLタグを取り除く処理を行う場合、
s/<.*?>//g;
と書いている場合と、
s/<[^>]*>//g;
と書いている場合がありますよね?
大抵のところで「<.*?>は遅い」とかかれているのですが、
実際どれくらい処理効率が違うのでしょうか
0180nobodyさん
04/02/10 18:56ID:???いくつか並んだ単語の中の、真ん中の単語だけを検索するには
どういう正規表現を使ったら良いのでしょうか?
<item name="アニメA.Aスレッド 13th session " category="AA" board="AAサロン"
<item name="アニメA.Aスレッド 12th session " category="AA" board="AAサロン"
<item name="アニメA.Aスレッド 11th session " category="AA" board="AAサロン"
と並んでいるもののうち、【アニメA.Aスレッド xxth session】だけを検索したいのですが可能でしょうか?
いろいろ検索しつつ試行錯誤をしていますが、どうしても分かりません。
どなたかいらっしゃいましたら、教えて頂けないでしょうか?
0182nobodyさん
04/02/11 05:51ID:???0183nobodyさん
04/02/11 21:58ID:???3・4文字目が同じ、5・6文字目が同じような単語をマッチさせる正規表現を教えていただけませんか?
○×△△□□ みたいな形式。1・2文字目はなんでもOK。7文字目以降に何がきてもOK。
sedでおねがいします。
0184nobodyさん
04/02/11 22:18ID:???0185nobodyさん
04/02/11 22:24ID:???0186nobodyさん
04/02/11 22:33ID:???0188nobodyさん
04/02/12 01:23ID:???0189nobodyさん
04/02/12 01:38ID:???こうか?
0190nobodyさん
04/02/12 02:26ID:???tattoo
balloon
saccees
あたりがひっかかればいいのか?
0191189
04/02/12 02:40ID:???/^..\(.\)\1\(.\)\2/
でいいんじゃない?
0192nobodyさん
04/02/12 02:44ID:???Perlで\1とかが使えるのは知ってたのですが、sedでもつかえるとは思って無かったです。
ぶしつけがましいかもしれませんが、Perlで!~と表される「マッチ以外」を
sedで実装するにはどうすればいいのでしょうか。
実は今回初めてsedというものに触れることになったもので・・・
Perlみたく正規表現が使える、というのは知ってたのですが仕様が違うらしくうまくいかなくて・・・
0195nobodyさん
04/02/12 23:51ID:???http://(.)+\.2ch\.net/test/read\.cgi/(.)+/[0-9]{10}/
これでいいですか?
もうちょっとスマートなのあればお願いします。
0196nobodyさん
04/02/13 04:16ID:???0198nobodyさん
04/02/13 17:38ID:???ごめんなさい。素人なものでよくわからないのです・・・
任意の文字は、「(..)+」じゃないんでしょうか・・・
「.+」でいいですか?
http://(.+\.2ch\.net|.+\.bbspink\.com|.+\.machi\.to)/test/read\.cgi/.+/[0-9]{10}/
でいいでしょうか?
それと、Perlでは、10個の数字なら「\10d」でできたと思うのですが、PHPではできないみたいですね・・・
0199195
04/02/13 22:04ID:???http://([a-zA-Z0-9]+\.2ch\.net|[a-zA-Z0-9]+\.bbspink\.com|[a-zA-Z0-9]+\.machi\.to)/test/read\.cgi/[a-zA-Z0-9]+/[0-9]{10}/
これでOKですね。
0200nobodyさん
04/02/14 02:42ID:???0201nobodyさん
04/02/14 12:38ID:???次の文字列で、<!--from-->〜<!--to-->部分を除去する
正規表現が分からないです。
"あい<!--from-->か<>き<!--to-->うえ<!--from-->くけ<>こ<!--to-->お"
→「あいうえお」を取り出したい
自作の失敗正規表現
/<\!--from-->.*<\!--to-->//g
→「あいお」になってしまう。
0208nobodyさん
04/02/14 23:14ID:???今は
$title =~ s/.*?( alt=\".*?\")*/$1/gs;
$title =~ s/alt="//g;
$title =~ s/"//g;
とやっていますが、効率が悪いと言われました。
0211nobodyさん
04/02/14 23:43ID:???alt属性値は複数ある可能性もあるんです(<img>タグの個数が分からないため)
0212nobodyさん
04/02/14 23:49ID:???で、求めたいことをやるコードなら、今、プログラム板の
Perl質問箱でも答えたとこだが、
@title = ($_ =~ /.*? alt=\"(.*?)\"*/$1/g);
でよろしかろう。
0213nobodyさん
04/02/15 00:04ID:???ヒントを得られたので改変して自己解決しました。
$title =~ s/.*?alt=\"([^"]*)[^(alt)]*/$1/gs;
これでできました。
どうもありがとうございました。
0216nobodyさん
04/02/15 00:24ID:???何か問題があるんでしょうか・・・汗
0217nobodyさん
04/02/15 00:28ID:???alt="〜"以降にaかlかtが含まれるとそれ以降がおかしな事に・・・
0218nobodyさん
04/02/15 02:32ID:???0219nobodyさん
04/02/15 02:58ID:P41SZm3C90020E68E8D0320A9028D14FF40AE7307BD5A8...
これに16文字ごとに00を挿入するにはどう書けばいいでしょうか?
こんな感じに出力したいのですが
0090020E68E8D0320A009028D14FF40AE730007BD5A8...
自分でチュートリアルみながらやってみたら
アホみたいに00で溢れてしまいました・・・
0221219
04/02/15 04:05ID:???$output =~ s/\(................\)/00\1/gs;
0222nobodyさん
04/02/15 04:20ID:???$output =~ s/([0-9A-Z]{16})/\1xx/gs;
print $output;
00ができねー。
■ このスレッドは過去ログ倉庫に格納されています