トップページphp
219コメント91KB

正規表現道場 Part2

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2012/09/19(水) 18:58:43.51ID:bdgNsY2f
【正規表現道場の掟】

・言語不問

・質問も大歓迎。使用言語を書くのを忘れずに。

正規表現と関係ない話・質問は他スレへどうぞ。

前スレ
正規表現道場
http://kohada.2ch.net/test/read.cgi/php/1168450843/
0002nobodyさん2012/09/20(木) 03:58:43.36ID:???
>>1

●過去スレ
正規表現道場@2ch
 http://pc.2ch.net/test/read.cgi/php/996105815/
正規表現道場@2ch Part2
 http://pc5.2ch.net/test/read.cgi/php/1038146241/
正規表現道場@2ch Part3 s/煽り|荒らし/あぼーん/g
 http://pc5.2ch.net/test/read.cgi/php/1069245758/
正規表現道場@2ch Part4
 http://pc8.2ch.net/test/read.cgi/php/1105930285/


●過去スレのテンプレにあった参考サイトたち
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://web.archive.org/web/20021219021503/http://www01.u-page.so-net.ne.jp/jc4/hiroyuki/rex_index.html
Regular Expression(Riue ちゃんの正規表現講座)
 http://www.sixnine.net/regexp/

ほとんどは↓のリンク集にまとまっています。
正規表現/文字コード最新リンク2005
 http://www2.famille.ne.jp/~akio1998/l_grep.html (Not Found)
0003nobodyさん2012/09/22(土) 03:58:02.23ID:???

                        |:::ハ:.:.:.:.:.:i:.:.:i.:.:i./.:.://メノ  左ォ}::::ノ::ノノ
                    |::::i:::';::::::::l、::i:::ハ:/,ィチ爪'    {ヒチ'!::イイ
                      |ハ::::::ヾ::::ハ 'Vリ ゙´ {、込ソ    ゛″!:::i:.:l
                        |:.::ト、:.:.:ヾ:.ハーi|   ::::::::      〉 ノ::::i::.|
                    {:.:.ト、ヾ.:.:.:ヾハ lト、        _, , イ:.:.:.:i.:ハ
                     ヾ::ヽゞ、\.::.\!! ヽ、.   ´ /!.::!.:.i:.:!:.!:l    >>1乙ぱい
                 , '" ヾ\ \:::::::::k   /` ー ' `メ'リ:.:.ノ.ノ:ノノ
                     /     川   リllVハ. (  i `\ ,イイ// //
                /              |l ̄`ヽ  ノ    `メ、
               ,/            {:}          `ー'- ニ_
             ,/         _∠     |l     \ ,      \
        /        _ ,. イ´:       |l      \      ,λ
       /   -‐‐‐-<´   .!   /    |l       ' ,   _,ィ'ンy}
        〈            \  .ノ`ー斗rェ,,_,_,_|l          ,.ir'彡イy-´ !
        `ヽ、        ` ' <._ {jt=t-t-ミ`^Yーrヘr-彡'水k} !:} .ノ
            ` ー-  .._       ` -ヽ.  l`亠^{:i ̄ {:リ |ハ ノノ/ノ
        _,. -‐ '  ̄ ´ ̄` ー- 、    \{{   {:l   {:i ノ_,ィニ_ン´
      //                  `ヽ 、\ \  {:l  {∠ニァ--'
     / /                 `ヽミニ>ァ┴ '´
   /\V|                          /
  ./   ヾ.、                  ,. ' ´
0004nobodyさん2012/10/15(月) 10:43:51.98ID:???
>>2
正規表現最新リンク集2005
http://web.archive.org/web/20100410230942/http://www2.famille.ne.jp/~akio1998/l_grep.html

個人名載ってるしこのまま外しちゃってもいいかもしれない
0005nobodyさん2012/10/19(金) 12:38:26.99ID:ZQDqri43
過疎スレ状態になっているっぽいですが質問宜しいでしょうか?
0006nobodyさん2012/10/19(金) 12:44:45.04ID:???
>>1
0007nobodyさん2012/10/19(金) 19:53:20.37ID:???
質問は?
0008nobodyさん2012/10/30(火) 16:10:01.92ID:???
>>5の人とは別人ですが質問がありますのでお願いします

拒否したいワード例
・ばか
・ばっかやろー
・ばーか

掲示板の拒否ワード機能を使って上のような言葉を
 ^(ばか|ばっか|ばーか)
このようにまとめているのですが、
もっと効率よくまとめられるような気がしています

 ^ば(0または任意の1文字)か
以上のように、
まとめることは可能でしょうか?
0009nobodyさん2012/10/30(火) 17:54:51.44ID:???
ば.?か

ばいか(売価)とかも入るけどねー
0010nobodyさん2012/10/30(火) 21:28:35.04ID:???
〜ばかり
ばっかり
ばんから
0011nobodyさん2012/10/31(水) 08:02:36.23ID:???
ばんかい
バイカム

こういうのは>>8の指定の方が間違いがないね
001282012/10/31(水) 12:31:50.64ID:???
まさに、>>9のようにまとめるられる書式を知りたかったのです!が…
皆さんご指摘のことを読むと確かにおっしゃるとおりですよねー

ば.?か、のような書式で運用できるかできないか、
掲示板のログとにらめっこしてみることにします

ともあれ、お答えくださった皆さん、とても参考になり助かりました
ありがとうございました
0013nobodyさん2013/01/29(火) 08:17:24.91ID:???
せめて同じ文字はまとめるか
^(ば(か|っか|ーか))
0014nobodyさん2013/02/10(日) 11:51:32.02ID:m9q+FHWZ
パスワードの登録で
半角アルファベットと半角数字の組み合わせで8文字以上
という条件を考えてるんですが、以下じゃダメですよね?

preg_match('/^[a-zA-z0-9]{8,}$/', $s);

アルファベットと数字の組み合わせ(アルファベットも数字もどちらもある)とするには
どうしたら良いでしょうか?
0015nobodyさん2013/02/10(日) 12:46:13.25ID:???
>>14みたいな正規表現のちょっとしたテクニック集とかどっかにまとまってないかね?
0016nobodyさん2013/02/13(水) 23:30:20.10ID:???
/^(?=(.*\d[a-zA-Z].*)|(.*[a-zA-Z]\d.*))\w{8,}$/

数字英字 もしくは 英字数字という並びが存在する英数字8文字以上
0017nobodyさん2013/02/14(木) 00:13:02.40ID:???
>>16を1回チェックするのと、
>>14と「英字を含む」「数字を含む」の計3回チェックするのとで、どのくらい

ここまで書いたところで自分でいろいろ試してみた。
$s = '3066058kczgr9784685fwn874fos847fos8djtkcrzu9q58nzfc';
for($i=0; $i<1000000 && preg_match('/^(?=(.*\d[a-zA-Z].*)|(.*[a-zA-Z]\d.*))\w{8,}$/', $s); $i++){} //2.3948659897 sec.
for($i=0; $i<1000000 && preg_match('/^[a-zA-z0-9]{8,}$/', $s) && preg_match('/[a-zA-z]/', $s) && preg_match('/[0-9]/', $s); $i++){} //5.7406949997 sec.
for($i=0; $i<1000000 && preg_match('/^[a-zA-z0-9]{8,}$/', $s) && !preg_match('/^[0-9]+$/', $s); $i++){} //3.9960801601 sec.
for($i=0; $i<1000000 && 8<=strlen($s) && ctype_alnum($s) && !ctype_digit($s); $i++){} //2.2285568714 sec.
$s = '1';
for($i=0; $i<1000000 && preg_match('/^(?=(.*\d[a-zA-Z].*)|(.*[a-zA-Z]\d.*))\w{8,}$/', $s); $i++){} //0.0000748634 sec.
for($i=0; $i<1000000 && preg_match('/^[a-zA-z0-9]{8,}$/', $s) && preg_match('/[a-zA-z]/', $s) && preg_match('/[0-9]/', $s); $i++){} //0.0000240803 sec.
for($i=0; $i<1000000 && preg_match('/^[a-zA-z0-9]{8,}$/', $s) && !preg_match('/^[0-9]+$/', $s); $i++){} //0.0000209808 sec.
for($i=0; $i<1000000 && 8<=strlen($s) && ctype_alnum($s) && !ctype_digit($s); $i++){} //0.0000181198 sec.

おもしろかった。
0018nobodyさん2013/03/04(月) 01:35:07.40ID:???
>>13
これはひどい
0019nobodyさん2013/03/09(土) 22:12:30.87ID:???
^([a-z]|[A-Z]|[0-9]){8,}$

はダメ?
0020nobodyさん2013/03/09(土) 23:24:50.86ID:???
ダメ
0021nobodyさん2013/03/10(日) 23:50:57.56ID:???
>>19
大文字と小文字を区別したいってことなら

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[A-Za-z0-9]{8,}$

でおk
0022nobodyさん2013/03/18(月) 20:02:10.97ID:XSCUuGgi
すっごい初歩的だったらすまそ
http://www.rider-n.sakura.ne.jp/regexp/regexp.php
で試す限りはうまくいくんだけどPHP上でうまくいかない。

スクリプト SJIS
マッチング文字列 SJIS
PHP内部文字エンコ SJIS
の環境下で

【サッカー】xxxxx【野球】

で最初のサッカーだけをマッチングしたいので
/^【([^】])】/i
としているんだけど、サッカーの時はマッチしない。
【テニス】xxxxx【卓球】ならちゃんとテニスがマッチする。

なんで?(´・ω・`)
0023nobodyさん2013/03/18(月) 20:21:31.67ID:???
>>22
それだとテニスもマッチしないはずだが
[^】] は「 】」以外の1文字ってことになる
それとShift_JISなんて捨ててUTF-8使おうぜ
0024nobodyさん2013/03/18(月) 22:12:52.90ID:XSCUuGgi
>>23
すません、[^】]+です。
SJISで何とか…
0025nobodyさん2013/03/19(火) 00:22:00.75ID:???
mb_regex_encoding("sjis");
mb_ereg ("^【([^】]+)】" ,$txt,$ret);

pregはSJIS使えません
0026nobodyさん2013/03/24(日) 00:53:34.57ID:???
>>22
文字列をアスキーコードに変換してから検索しろ
0027nobodyさん2013/05/16(木) 11:13:37.06ID:???
javascriptでの正規表現で質問があります。

/^(?:(?:http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)*$/

上記はURLをチェックする簡単な正規表現だと思うのですが
そのURLがRSSかどうかチェックする正規表現にしたいのです

RSSの拡張子は .rss .rdf .xml です。

URLの最後の拡張子にこの文字列が入ってるかチェック出来るようにしたいのですが
どうすればいいでしょうか?

お願いします。
0028nobodyさん2013/05/16(木) 11:28:59.91ID:???
最後をこれに差し替え
\.(rss|rdf|xml)$/
0029nobodyさん2013/05/16(木) 11:38:31.44ID:???
>>28
レスありがとうございます
ただこれに差し替えるだけだと

http://www.example.com/.rss

これも正常として判断されてしまうのですがどうしたら良いでしょうか?

よろしくお願いします。
0030nobodyさん2013/05/16(木) 11:47:36.80ID:???
[^\\/:,;*?"<>|]\.(rss|rdf|xml)$
0031nobodyさん2013/05/17(金) 09:33:25.55ID:???
>>30
お礼遅くなってすいません
ありがとうございます!
うまくいきました!
0032nobodyさん2013/07/20(土) NY:AN:NY.ANID:75R8ikZF
PHPのpregでの正規表現について質問です。

<a href="http://www.test.jp/"; title="test"><img src="test.png" alt="ALT" title="TITLE" /></a>

上記のようなHTMLを正規表現でヒットさせ、

<li>TITLE</li>

に変換させたいのですが、正規表現ではどう表したらいいのでしょうか?
0033nobodyさん2013/07/21(日) NY:AN:NY.ANID:???
保守
0034nobodyさん2013/07/25(木) NY:AN:NY.ANID:2TH+2Iiw
正規表現で解決できるのではと思い、こちらで質問させてください。

"ver.2 test.Test"という文字列を"ver.2 test. Test"のように
ピリオドの次の文字が大文字のときに限り半角スペースを挿入したいのですが
良い方法はないでしょうか?
0035342013/07/25(木) NY:AN:NY.ANID:???
>>34です。
正規表現のグループ化を用いることで解決できました。
安易に質問を投稿してしまい申し訳ございませんでした。
0036nobodyさん2013/07/25(木) NY:AN:NY.ANID:???
せっかくなのでその正規表現を書いておきますねくらいの気持ちが必要だ。
0037nobodyさん2013/07/25(木) NY:AN:NY.ANID:???
>>34
preg_replace('/\.(?=[A-Z])/','. ',$str);
0038nobodyさん2013/09/06(金) 20:12:17.12ID:???
>>32
見ての通り超手抜きだけど例の通りか属性値のダブルクォートが無いぐらいならこれで大丈夫

検索文字列: /^(.+<img.+title=\")(.+)(\" \/><\/a>)$/
置換文字列: <li>$2</li>
http://regex101.com/r/qI6aG4


> PHPのpregでの正規表現

実はPHP分からないんだけど↓みたいな感じ?w

preg_replace("/^(.+<img.+title=\")(.+)(\" \/><\/a>)$/i", "<li>$2</li>", $input_lines);
0039nobodyさん2013/09/14(土) 18:05:14.35ID:0qKO1mtd
質問です。
PHP5で
preg_match ("/.*'.*/s", $_POST["value"])
としたときにvalueに「'」があってもマッチしない場合があるらしいのですがどういう文字列の場合でしょうか?
preg_matchはPCRE関数でPerl互換です。マルチバイトに対応していないのでその辺りに落し穴があるのかなと思うのですが。
0040nobodyさん2013/09/14(土) 19:42:16.21ID:QgtFjJm6
FireFoxでRSSリーダにFeedlyを使っています。
NGワードフィルターが正規表現なのですが教えて頂けないでしょうか。
"韓国"というキーワードをフィルタリングしたいです。

http://userscripts.org/scripts/show/172085
0041nobodyさん2013/09/15(日) 10:40:22.03ID:???
>>39
マッチしない場合があるとは思えないけど、一応マッチしない場合があると言った人に聞いてみれば?
まぁ、$_POST["value"]が送信されて来なければ話は別だけど・・

ちなみにそれは preg_match("/'/", $_POST["value"]) のようにシンプルに書くこともできる
0042nobodyさん2013/09/15(日) 10:43:39.46ID:???
>>40
使ったこと無いけど、"韓国"だったら完全一致なのでそのまま正規表現使わずに書けると思うけど
0043nobodyさん2013/09/15(日) 15:21:48.42ID:???
2ch専ブラにおける2chmateのデバッグ用文字列のみの書き込みをNGにしたいです

2chMate 0.8.5.6 dev/HTC/HTL21/4.1.1
2chMate 0.8.5.4/SHARP/SBM003SH/2.3.4

↑こんなやつです

一応専ブラはjanestyleということでどなたか教えていただけませんでしょうか
0044nobodyさん2013/09/16(月) 04:52:23.59ID:V1KLg8Lz
韓|トンスル|ニダ|
0045392013/09/16(月) 18:13:41.90ID:???
>>41
マッチしない場合は無いようでした。
phpの設定の問題でpreg_matchがマッチできずfalseを返す場合があるらしいです。
0046nobodyさん2013/09/19(木) 16:03:12.92ID:XGTpu0pg
最近2ちゃんで同じ文字列を数行繰り返す荒らしがいますが

最近2ちゃんで同じ文字列を数行繰り返す荒らしがいますが

最近2ちゃんで同じ文字列を数行繰り返す荒らしがいますが

↑こんな感じです
改行を挟まない場合もあります

Janeでこれをあぼーんしたいんですが
同じ文字列が数行続いたかを調べられる正規表現はありませんか
0047nobodyさん2013/09/19(木) 19:40:04.05ID:???
>>46
1行文の2連投
http://thinkarc.blogspot.jp/2007/07/janeviewngex.html#NGEx_Contiguous_single-line

んでこれ以上は下で NGEx.txtを晒すスレ4
http://mattari.plusvip.jp/test/read.cgi/jane2ch/1325934427
■ このスレッドは過去ログ倉庫に格納されています