PHPの正規表現で改行を含む任意の文字列を取得する方法

  1. ホーム
  2. PHP
PHPの正規表現で改行を含む任意の文字列を取得する方法

PHPでHTMLタグなどを操作したい時に、正規表現で改行を含む任意の文字列を取得する必要が出てくるかと思います。そんなときに便利なコードの書き方を紹介します。ちなみにパターン修飾子というものを使います。

よくあるミス

preg_match('/<p>.*?</p>/', $document, $html_tag);
echo $html_tag[0];

この場合だとHTMLタグが改行をまたいでいた場合にヒットしません。

パターン修飾子:s (PCRE_DOTALL)を使う方法

preg_match('/<p>.*?</p>/s', $document, $html_tag);
echo $html_tag[0];

スラッシュの後に小文字のsを入れます。するとドットが改行を含めた全ての文字を参照するように変わります。このスラッシュの後に置くアルファベットはパターン修飾子と呼ばれます。

s (PCRE_DOTALL)

この修飾子を設定すると、パターン中のドットメタ文字は 改行を含む全ての文字にマッチします。 これを設定しない場合は、改行にはマッチしません。 この修飾子は、Perl の /s 修飾子と同じです。 [^a] のような否定の文字クラスは、 この修飾子の設定によらず、常に改行文字にマッチします。

[^<]でも取得できそうに思えますが、間に何らかのHTMLタグが入っているだけで失敗します。

Twitter Facebook LINE はてブ