正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g
レス数が950を超えています。1000を超えると書き込みができなくなります。
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/
0871nobodyさん
04/11/19 21:05:09ID:???0872nobodyさん
04/11/20 08:08:33ID:2uxiNSVv正規表現でマッチさせる事とか出来ませんでしょうか?
↓こんな感じの部分を色分けしたいんですが。
print <<< PRINT_HTML
<div class="box">
<b>ぬるぽ</b>
</div>
PRINT_HTML;
0873nobodyさん
04/11/21 08:46:27ID:baqdUP4H0874nobodyさん
04/11/21 17:13:13ID:bKPK+kaXヒアドキュメントが醜いからPerlは結構嫌われているわけで
PHPは変数内でも改行できるという点から
PHPでヒアドキュメントは使わない方がいいと思うけど。
0876nobodyさん
04/11/21 23:14:38ID:???自分はサクラエディタとやらは使わないしPerlしかやらないが、
良ければこれを参考にしてくれ。
/<<<s*([a-zA-Z0-9_]+)\n.*?n\1;/
主な条件は、後方参照ができること(\1が使える)と、
複数行のマッチができること(.に\nを含ませる)。
できれば .*? を (.*?) として、$2で抜き出せれば理想的なんだが。
0877nobodyさん
04/11/22 00:27:02ID:???874ではないが874に同意だな
ヒアドキュメントははっきり言って見にくい
確かにPHPで使ってるとなぜ使うのか疑問になる
これは人それぞれの慣れと書き方だと思うけどね
0878nobodyさん
04/11/22 00:32:29ID:???0879nobodyさん
04/11/22 04:03:50ID:???$str =~ s/ //g;
ってやっても文字化けするケースと
そのまま正常なケースがあるんだがなんでだろ?
Perlメモを見て
$Zspace = '(?:\xA1\xA1)';
$str =~ s/$Zspace//g;
でやっても無理だった
0880nobodyさん
04/11/22 05:48:42ID:???たまたま、前の文字の最後が \xA1 で後の文字の最初が \xA1 に
マッチするようなケースにあたるとまずくなるよね。
0882872
04/11/22 06:45:50ID:C8SlIvxcそ、そうなんですか!?
自分的には、変数を直接使用でき、「"」や「'」をエスケープする必要が無く、
HTMLソースをそのままコピペ出来るので、なかなか使いやすいと思っていたのですが…
ちなみにこんな感じで書いてるんですが、邪道なんでしょうか…
http://cyberbooth.fc2web.com/admin.html
>>876
ご教示をありがとうございます!
そのコードを参考に色々と自分で試してみます。
まだPHPは5日程前に始めたばかりでして、
どうもまだこの「正規表現」に苦戦していましたので、非常に助かりました。
0883nobodyさん
04/11/22 07:24:57ID:???変数直接書けるけど
{}で囲ったりしないと後ろの文字が変数名の続きと勘違いしてしまうケースあるし
何よりほとんどのテキストエディタで対応してない
使ったあとの自動インデントが狂うエディタ多数
ヒアドキュメントは確かに便利であるし機能としてあるから邪道ではないと思うが
ttp://www.kauda.jp/~suguru/comp/php/strings.html
とか書いてるけどPHPではいらんっぽい
ただPerl出身者はおそらくヒアドキュメント大好き人ばっかだと思う
組んでるときはいいけど作った後に見ると見にくいって感じかな
>>877の通り、最後は好き嫌いのレベルなんだけどね
0884nobodyさん
04/11/22 20:51:42ID:???Perl なら Template Kit, PHP なら Smarty ばっか使ってるぞ
スレ違いだな、すまん
0885nobodyさん
04/11/22 21:24:40ID:???ヒアドキュメントってほんとに必要かなあ、って思ってしまう。
0886nobodyさん
04/11/22 21:26:24ID:???0888nobodyさん
04/11/25 14:13:58ID:???仕事だと見た目なおすたびにソースいじるの嫌だからテンプレ
にしちゃうな...って、正規表現関係ないね。
0889872
04/11/25 16:30:50ID:???なるほど、ロジック部分と、ビュー部分を分離して管理する
「Smarty」なるツールがあるんですね。
これはかなり便利そうです。
お陰で一つ勉強になりました!
0890nobodyさん
04/11/25 18:50:17ID:???0891nobodyさん
04/11/26 11:53:40ID:???EUCでの空白問題で同じように私も壁にぶつかりました
解決法は特に載ってないみたいなんですが
どうしようもないんですか?
0892nobodyさん
04/11/26 12:31:17ID:???http://www.din.or.jp/~ohzaki/perl.htm#JP_Match
0893nobodyさん
04/11/27 11:11:00ID:???↑のような文字列から最後の"script.cgi"を抜いた文字列(/aaa/bbb/ccc/)に
マッチする正規表現ってどうなるでしょうか?
0894893
04/11/27 11:25:14ID:???/の数(パスの深さ)は任意で、最後のスラッシュまでを取り出したい訳です。
0895nobodyさん
04/11/27 11:35:32ID:???$string2 = $1;
print $string;
0896nobodyさん
04/11/27 11:35:51ID:???0898nobodyさん
04/11/27 17:33:21ID:???0901nobodyさん
04/11/27 17:47:14ID:???0902nobodyさん
04/11/27 17:47:30ID:???例えば、>>895に対して
m!(.*/)! の方がスマートでいいじゃない?
とか。。。 勝負を挑んでいく感じ?
0903nobodyさん
04/11/27 17:53:19ID:???全然できましぇん全部やってください〜なら初心者スレにでも逝けって感じ
>>1よみゃディレクトリ取得くらい素人でも出来る
>>902がスマーティかどうかは置いとくにしても
0904nobodyさん
04/11/27 17:55:29ID:???0906nobodyさん
04/12/01 22:05:03ID:MrbpLm4t"あ,い,う " ,え,お という文字列のダブルクォーテーションでくくられた部分の半角カンマ(,)を全角カンマ(,)に変換するのはどうしたらいいでしょうか?
変換前:"あ,い,う " ,え,お
変換後:"あ,い,う " ,え,お
0907nobodyさん
04/12/01 22:13:31ID:MrbpLm4t上記からダブルクォーテーションの削除も同時に行いたいです。
変換前:" あ,い,う " ,え,お
変換後:あ,い,う,え,お
0909nobodyさん
04/12/01 22:22:39ID:MrbpLm4t正規表現文字列置換を使います。
ですので、Perl5でお願いします。
0910nobodyさん
04/12/02 03:16:36ID:???こりゃどうだ。
$dat="\"あ,い,う \" ,え,お";
while($dat=~ /"(.+?)"/){
$ushiro = $';
($mae = $1) =~ s/,/,/g;
$dat = $mae . $ushiro;
}
print $dat, "\n";
0911nobodyさん
04/12/02 10:04:13ID:???0913nobodyさん
04/12/02 12:22:09ID:c/xEYFBxという正規表現はどう書いたらいいのでしょうか?
$a =~ /^[0-9a-zA-Z]{5,}/
とするとaaaaaはもちろんマッチするのですが、abcdeもマッチしてしまいます。
aaaaaもbbbbbもcccccもマッチする、しかしabcdeはマッチしない、とやりたいのです。
ご教授おねがいします
0914906
04/12/02 12:29:03ID:???ありがとうございます!
でも、今回のものではループは使用できませんでした。すいません。
strData = "あ,い,う" ,え,お
strWk = bobj.Replace("s/"".+,.+""/,/kg",strData)
という形でやってみたのですが、[「,」,え,お]となってしまいました。
ループを使わないと無理なんですね。すいませんでした。
0918nobodyさん
04/12/06 21:15:27ID:???顔文字みたいな正規表現無いかな?
0919nobodyさん
04/12/06 23:32:21ID:???おぱーい
0920nobodyさん
04/12/07 01:20:47ID:???0921nobodyさん
04/12/07 03:16:21ID:???/J+_+`/
/[^_]人[_^]/
/(?=_=)/
/(V)o\o(V)/ ←バルタン星人
(o|o) ←ウルトラマン
!|!○| ̄|_!|!
正規表現の考え方で育った人間ってどうなるんだろうと
ハァハァしながら作ってみた。
0922nobodyさん
04/12/07 22:38:18ID:???0923のりのみや
04/12/10 07:24:26ID:xBvxelrRテキストファイル内の行をランダムで10行ほどgrepするにはどうすれ良いのじゃ?
まろにはとんとわからんでのう…
どなたか教えてくれぬか?
この通りじゃ
0924nobodyさん
04/12/10 08:07:02ID:???うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
うがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだうがんだ
0926nobodyさん
04/12/14 05:12:31ID:???$value =~ s/[$WwWw]+//g;
はうーうまくいかないっす。
0927nobodyさん
04/12/16 18:01:44ID:Ovl4zL1K文字列にはマッチしないっていう正規表現はどうかけばよいですか?
0928nobodyさん
04/12/16 18:42:21ID:???Perl なら /^(?:(?!def).)*?abc(?:(?!def).)*\z/
もっと簡単にかけそうな気もするけど。
0931nobodyさん
04/12/17 11:52:31ID:???0932nobodyさん
04/12/19 12:51:50ID:???$aa="123456";として
$aaの行末から3、4つ目の数字(この場合34)を変数に格納したいのですが、
正規表現でできますか?
0934nobodyさん
04/12/19 15:59:53ID:???<?php
$aa = '123456';
preg_match('/(\d\d)\d\d$/', $aa, $match);
echo $match[1];
?>
0935nobodyさん
04/12/20 08:38:14ID:???0937nobodyさん
04/12/20 18:59:11ID:???0938nobodyさん
04/12/21 05:59:53ID:???0940nobodyさん
04/12/22 06:53:40ID:???0941nobodyさん
04/12/22 09:46:08ID:???日本海の冬の幸をたんまり仕入れろ。
築地で仕入れろ。力一杯仕入れろ。
強く、優しく、そして時にはエロく。
そうやってダンディーに仕入れた冬の幸を、
極上の練炭で焼く。やさしく焼く。じっくり焼く。
焼き上がり直前は、一気に火を煽って瞬間の仕上がりに全てを賭ける。
そして、食べる。焼き上がりを食べる。ハフハフしながら食べる。
味わう。素材の持ち味をすべて引き出して食べる。
感じる。素材の持つ力強さとうま味を精一杯感じる。
そして、思いを馳せろ。
自分が食べたものは、かけがえのない命だと。
たとえ単に美味な日本海の冬の幸だろうと、つがいだったものもいれば子供もいたかもしれない。
その命を自分は食してしまったのだと。
そして考えろ。それは命が命をつなぎ止める、地球上の壮大な生態系の一部であることを。
最後に、想え。感謝を。命への感謝を。生きていることへの感謝を。
0943nobodyさん
04/12/22 11:07:26ID:???main_1="test "
を
main_2="test"
にする。
つまりjavascriptで一行の文字の末尾のスペースを消すにはどうしたら良いですか?
main_2=main_1.replace(/$([ ]*)/,"");
では置き換えされません。
2.
全てマッチしたかどうかはどの様に調べたらよいですか?
数字のみの文字列かどうかを調べたい場合
text_1="0a"
text_2="0"
Reg_1=/[0-9]/
だとtext_2でもマッチしてしまいます。
よろしくお願いします。
0944nobodyさん
04/12/22 14:00:17ID:???1. 末尾のスペースなら str.replace(/([ ]*)$/, "") じゃない?
2. 先頭から末尾まで全て数字、ということで /^[0-9]+$/ かな?
0946nobodyさん
04/12/28 20:23:05ID:N6XrfelJ置き換えたいんですが、\[.*\]じゃダメなんですよね。
どうすればいいのでしょうか。ちなみに秀丸を使ってます。
0947nobodyさん
04/12/28 20:28:35ID:gvnNaLCU置き換えたい文字を直接指定すればいいだけだろ。
0948nobodyさん
05/01/08 18:38:47ID:1HeEdFHi$str =~ s/<a\s.*?>(.*?)<\/a>/$1/ig;
とやると、aタグの一部が消えずに残ってしまったりして困ってます。
あと、.*?は遅いと書いてあるのですが、良い案があれば教えてください
0949初心者
05/01/08 18:52:51ID:TEnfV1Izのですが、うまくいかないので、どなたか教えて頂けますでしょうか。
phpinfo();を書くと、「mbstring」の表に
Multibyte (japanese) regex support enabled が表示されるので、日本
語対応の正規表現関数は使えると思うのですが、うまくいかないのです。
<?php
print("結果は");
$kekka=ereg("a","abcd",$br);
print($br[0]);
$kekka=mbereg("b","abcd",$cr);
print($cr[0]);
print("です");
?>
と書くと、「結果はaです」としか表示されません。「結果はabです」と
表示させたいのですが、どうすれば良いのでしょうか。教えて頂けると
非常に助かります。宜しくお願い致します。
0950949
05/01/08 19:12:39ID:TEnfV1Izすれば出来るんですね。お騒がせしました。。。
0951nobodyさん
05/01/08 19:29:22ID:???実はHTMLタグの削除と正規表現は相性が悪かったり。
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq9.html#How_do_I_remove_HTML_from_a_stri
それでもやるとしたら、
$str =~ s/<a\s[^>]*?>(.*?)<\/a>/$1/ig;
ぐらいかな。
一部が残るのは分からない。
0952nobodyさん
05/01/08 19:49:31ID:/O5s2fuehttp://rinristarin.value-net.net/22/fir/ リリカちゃんが
エッチしたら更新する日記。最近ずっとこの子に萌えっす。
俺ともお願いぃぃ・・・
0954nobodyさん
05/01/08 21:06:07ID:???0955nobodyさん
05/01/09 10:04:16ID:???@data = split(/:/, $str);
だと、余分な区切りまで・・・
0956nobodyさん
05/01/09 10:17:30ID:???0957nobodyさん
05/01/09 10:32:46ID:???@data = $str =~ m/^([^:]*):(.*)/;
0959nobodyさん
05/01/11 22:33:00ID:nnjmq/8Zhttp://*.hoge.jp/
ってどうやって書くんでしょう?書籍とかと数時間格闘しましたが
ぱっさり理解できないのです
0961nobodyさん
05/01/11 22:42:43ID:???0962nobodyさん
05/01/12 00:48:18ID:mmvJMOP+文字列 = "例えば(その1)や(その2)など";
で( )の中身をとりたいんすけど素直に"/\((.+)\)/"とすると
"その1)や(その2"がマッチしてしまいます。
"/\(([^\(]+)\)/"とすると"その1"しかマッチしてくれません。
whileを使ってもうまくいきません。どのようにしたらいいでしょうか。
phpでpreg_matchしています。
0963nobodyさん
05/01/12 00:56:34ID:???そしてpreg_match_allの間違いじゃないのか
0964nobodyさん
05/01/12 00:58:27ID:???0965962
05/01/12 01:10:13ID:???それでいけました。
使ってるリファレンス本にpreg_match_allがのってなかったので気付きませんでした。
きちんとマニュアル読むようにします。
0966959
05/01/12 13:29:58ID:o9KFPT4S直リンクを防ぐために
httpd.confを次のように弄ったのですが、
上手く動作しませんでした。
サブドメインからのアクセスなら、
サブドメインが何でも、直リンクにはならないように設定したいのです。
自宅サーバー板で正規表現を勉強しろ、とのコメントをいただいて、
悪戦苦闘してるんですが、パッサリ理解できないのでございます。
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://*\.hogehoge\.jp/.*$ [NC]
RewriteRule ^(.*)$ - [F]
これは動きませんでした。
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^http://abc\.hogehoge\.jp/.*$ [NC]
RewriteRule ^(.*)$ - [F]
こっちは正しく動作しました。
0967nobodyさん
05/01/12 14:01:55ID:???*は直前の文字が0以上繰り返される、という意味なので、上の式がマッチするのは
http://.hoge . . .
http:////.hoge . . .
http:///////////////////////////////////////////////.hoge . . .
など。
どんな文字でもマッチさせるには、「.」の0もしくは1以上の繰り返し、と書けばいいんだが、
あらゆるパスにマッチする正規表現はかけてるのに、あらゆるサブドメインにマッチする
正規表現が書けないとはこれいかに。
0968nobodyさん
05/01/12 14:04:36ID:???正規表現で「 * 」は「直前の文字や正規表現を 0回以上繰り返す」という意味なので、
上の例の「 /* 」の箇所で「 / を 0回以上繰り返す」という意味になっちゃってる。
おそらくそこでやりたいのは「アルファベットを 1回以上繰り返す」だと思うので、
「 !^http://[a-z]+\.hogehoge\.jp/.*$ 」とすればいいんじゃないかな。
「 + 」は 1回以上繰り返す意味。
0969nobodyさん
05/01/12 15:11:10ID:1iafFrJp<span class="2ch_number">193</span> :
<span class="2ch_name">以下、名無しにかわりましてVIPがお送りします</span>:
<span class="2ch_date">05/01/12 13:43:10 ID:Zzzz4wKL</span></dt>
<dd>
<a href="http://jumpres/read.cgi/news4vip/1105500214/183"><a href="http://jumpres/183">>>183</a></a>
のレスをよく見ていえよ
<a href="http://jumpres/read.cgi/news4vip/1105500214/187"><a href="http://jumpres/187">>>187</a></a>! <br><br></dd>
↑のこういう一行(長いから改行してるけど)から>>999の左右にある<a></a>を外すっていうのをやりたいです。
どうしたらいいですか?
レス数が950を超えています。1000を超えると書き込みができなくなります。