開発ブログ

WWWクリエイターズが送る、Git、CSS、HTML、コマンドライン、Macの便利機能など、開発に関する役立ち情報発信します。気まぐれに更新。

正規表現:改行を越えて複数行にまたがるマッチング方法

最終更新:2017-09-05 by Joe

正規表現において、通常、特殊文字「.」は「改行を除くすべての文字」を表現します。

頻繁に利用する「.」ですが、改行を越えてすべての文字を吟味できません。改行を含めて文字列マッチを見つける方法をまとめました。

複数行を検索する表現

両指定子「*(0か、1つ以上の連続)」などを利用して、任意の文字列をマッチさせる正規表現「.*」。これは、その仕様上文字列中に「改行」があるとそこで途切れてしまします(※プログラミング言語によっては、その限りではないですので、仕様をご確認下さい(perlでは、修飾子で、single line, multi lineを区別します。))

「改行を含めたすべての文字列」を対象としたい時は、2つのメタ文字を利用します。これらはそれぞれ反対の関係です。

  • \s :空白、タブ、フォーム フィードなどの任意の空白文字
  • \S:空白文字以外の任意の文字

使用例を見てみます。

改行をこえて、複数行をマッチさせる(PHP)

[]の角括弧による表現は、「文字セット」や「文字クラス」と呼ばれ、カッコ内にふくまれるすべての文字を対象とします。

上記の例は、\sか、\Sのいずれかの文字、すなわち「空白を含むすべての文字」で、0回以上繰り返す、最長のマッチを探す事になります。

参考