凄く今更感が凄いですが、知らなかったので備忘録としてまとめ。
タイトルにもある通り、改行がある複数行の文字列から、指定した文字列を検索する方法です。
使用した関数は preg_match
関数です。
参考にした記事がこちら。
正規表現:改行を含めて、複数行でマッチングする方法 | WWWクリエイターズ
http://www-creators.com/archives/2589
参考サイトには、2種類の方法が紹介されていましたが、私は「パターン修飾子」を使う方法を使用しました。
パターン修飾子とは、末尾の /
(デリミタ)の後ろに記述する文字列のことで、.
の振る舞いを指定することができます。
デフォルトは「マルチラインモード」らしく、こちらでは .
は「改行コードを除くすべての文字」と一致します。
一方、「シングルラインモード」では、.
は「改行コードを含むすべての文字」と一致します。
サンプルコードはこちら。
$text = 'abc def ghi'; preg_match('/(.*)/s', $text, $match);
5行目の preg_match 関数の第一引数で指定している正規表現の最後に s をつけてシングルラインモードにしています。
こちらを実行すると、a から i までの全ての文字列を取得できます。
逆にマルチラインモードのサンプルコードはこちら。
$text = 'abc def ghi'; preg_match('/(.*)/m', $text, $match);
こちらのコードを実行した場合、1行目の abc しか取得されません。
検索対象の文字列が 1行だけであれば問題ないのですが、今回のように複数行からなる文字列の検索には向きません。
今回紹介した方法を使えば、例えば HTML ファイルから、指定したタグに囲まれた要素の中身を取得するなどが行えます。
もしくは、コメント文を抜き出したりすることもできますね。
…正直、コメント文の抜き出しならともかく、HTML 要素の取得には JavaScript
を使った方が早いのですが…どうしても PHP
で行う必要があるときには是非ご活用ください。
以上、PHP の preg_match 関数で複数行からなる文字列を特定の文字列で検索する方法でした。
ご参考になれば幸いです。