【正規表現,JavaScript,PHP】改行のある文字列をキャプチャする
結論
PHP, JavaScript ともに下記でOKです。[\s\S]*
例えば、下記の文章の『説明:』以降を抜き出したい場合。
PHPならば
説明:『あにゃまる探偵 キルミンずぅ』(あにゃまるたんてい キルミンずぅ)は、(改行)
日本のサテライト・ハルフィルムメーカーと(改行)
大韓民国のJM ANIMATIONにより(改行)
制作された日本のテレビアニメ。
JavaScriptならば
$result = preg_match('/^説明:([\s\S]*)$/u', $text, $match);
echo $match[1];
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
しかし試してみたところ、どうやらJavaScriptでは修飾子『s』を使うことができないようです。
s (PCRE_DOTALL)
この修飾子を設定すると、パターン中のドットメタ文字は 改行を含む全ての文字にマッチします。 これを設定しない場合は、改行にはマッチしません。 この修飾子は、Perl の /s 修飾子と同じです。 [^a] のような否定の文字クラスは、 この修飾子の設定によらず、常に改行文字にマッチします。【引用】PHP: 正規表現パターンに使用可能な修飾子 - Manual
http://jp2.php.net/manual/ja/reference.pcre.pattern.modifiers.php
ならば、PHP, JavaScript両方で使える『([\s\S]*)』だけを覚えるほうがお得です。