2012年01月23日
【正規表現,JavaScript,PHP】改行のある文字列をキャプチャする
結論
PHP, JavaScript ともに下記でOKです。
[\s\S]*
例えば、下記の文章の『説明:』以降を抜き出したい場合。
説明:『あにゃまる探偵 キルミンずぅ』(あにゃまるたんてい キルミンずぅ)は、(改行) 日本のサテライト・ハルフィルムメーカーと(改行) 大韓民国のJM ANIMATIONにより(改行) 制作された日本のテレビアニメ。
PHPならば
$result = preg_match('/^説明:([\s\S]*)$/u', $text, $match);
echo $match[1];
JavaScriptならば
var result = text.match(/^説明:([\s\S]*)$/); alert(result[1]);
解説
実験ページを用意しました。
http://www.usamimi.info/~sutara/sample/reg_js_php_01.php
([\s\S]*)
『\s』は空白文字です。『[\r\n\t ]』と同じです。
『\S』は空白文字以外の文字です。『[^\r\n\t ]』と同じです。
要するに、全部ってことですね。
【参考】JavaScriptで改行にもマッチする正規表現 - FFFF - 0x
http://os0x.g.hatena.ne.jp/os0x/20080213/1202900650
(この記事のおかげで本当に助かりました。m(_ _)m )
実験ページにあるとおり、下の二つでもOKです。
((?:\s|.)*) ((?:[\r\n]|.)*)
しかし、ちょっと分かりづらいです。
今回は、マッチするかどうかチェックするだけでなく、マッチした文字列を抜き出す(キャプチャ)ことを望んでいます。
そうなると、単に検索条件を指定する上でまとめたいだけ、サブパターンを作るためだけに『()』を使う場合、キャプチャされないように『(?: )』と記述する必要があります。
(?:サブパターン)
断然、1番目の方法が簡便です。
また、PHPならばPerlのフラグ(パターン修飾子とも)である『s』が使えます。
/^説明:(.*)$/su
s (PCRE_DOTALL)
この修飾子を設定すると、パターン中のドットメタ文字は 改行を含む全ての文字にマッチします。 これを設定しない場合は、改行にはマッチしません。 この修飾子は、Perl の /s 修飾子と同じです。 [^a] のような否定の文字クラスは、 この修飾子の設定によらず、常に改行文字にマッチします。
【引用】PHP: 正規表現パターンに使用可能な修飾子 - Manual
http://jp2.php.net/manual/ja/reference.pcre.pattern.modifiers.php
しかし試してみたところ、どうやらJavaScriptでは修飾子『s』を使うことができないようです。
ならば、PHP, JavaScript両方で使える『([\s\S]*)』だけを覚えるほうがお得です。
- 16 http://pipes.yahoo.com/pipes/pipe.info?_id=8dda7c5265619c2fb368495a3d11b784
- 16 http://www.google.co.jp/url?sa=t&rct=j&q=php+ヒアドキュメント&source=web&cd=3&ved=0CEkQFjAC&url=http://d.hatena.ne.jp/sutara_lumpur/20080803/1217724875&ei=djIdT5mfCsXXmAWP9tHVAg&usg=AFQjC
- 14 http://www.google.co.jp/url?sa=t&rct=j&q=正規表現 url抜き出し&source=web&cd=1&ved=0CCsQFjAA&url=http://d.hatena.ne.jp/sutara_lumpur/20100827/1282872312&ei=vRsdT-exEcqsiAfCvN37Cw&usg=AFQ
- 13 http://www.google.co.jp/url?sa=t&rct=j&q=lubuntu 11.10&source=web&cd=3&ved=0CDsQFjAC&url=http://d.hatena.ne.jp/sutara_lumpur/20111111/1320991035&ei=zD8dT4mzIMqUiQee7vTNCw&usg=AFQjCNHmcvQLDh79HrWXSmwTlxgwme_IQA&cad=rja
- 10 http://www.google.co.jp/url?sa=t&rct=j&q=php ヒアドキュメント&source=web&cd=3&ved=0CEsQFjAC&url=http://d.hatena.ne.jp/sutara_lumpur/20080803/1217724875&ei=Yz8dT4abB_H3mAXqh-yLCg&usg=AFQ
- 7 http://www.google.com/search
- 6 http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=2391&forum=12
- 5 http://search.yahoo.co.jp/search?p=エポキシパテ 補修&rs=2&aq=-1&ei=UTF-8&fr=top_ga1_sa
- 5 http://www.google.co.jp/url?sa=t&rct=j&q=ajaxSuggest&source=web&cd=2&ved=0CCwQFjAB&url=http://d.hatena.ne.jp/sutara_lumpur/20101027/1288143549&ei=CEseT4bWH_HCmQXk0onGDg&usg=AFQjCNH5jQb4nEa_3hbGksWiuljwWWe30A&sig2=b0MUsOyOWggRZ5knY3tnsA
- 5 http://www.google.co.jp/url?sa=t&rct=j&q=jquery+?????若?????+篏????&source=web&cd=10&sqi=2&ved=0CG8QFjAJ&url=http://d.hatena.ne.jp/sutara_lumpur/20090103/1230951879&ei=bzceT9vkPMuZmQXYx_ihDg&usg=AFQjCNEqavVk
