【正規表現,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]*)』だけを覚えるほうがお得です。