【PHP】改行がある文字列から正規表現を使って特定の文字列を検索する

  • 2020年3月25日
  • PHP

凄く今更感が凄いですが、知らなかったので備忘録としてまとめ。
タイトルにもある通り、改行がある複数行の文字列から、指定した文字列を検索する方法です。
使用した関数は 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 関数で複数行からなる文字列を特定の文字列で検索する方法でした。
ご参考になれば幸いです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG