正規表現で複数行にわたるテキストを扱う場合、通常の正規表現の設定では改行文字(\\\\n
や \\\\r
)に一致しないため、特定のフラグや構文を使って改行を含むマッチングが必要です。主に以下の2つのアプローチがあります。
/s
フラグ(DotAll モード): .
(ドット)が改行にも一致するようになります。
例: "a\\\\nb\\\\nc"
という文字列で "a.c"
に一致させたい場合。
a.c
通常の正規表現では、このパターンは1行にしか一致しません。しかし、/s
フラグを使用すると、改行をまたいだマッチが可能です。
a.c/s
[\\\\s\\\\S]*
を使う: .
(ドット)が改行を含まないため、[\\\\s\\\\S]
というパターンを使って全ての文字に一致させます。これは空白文字(\\\\s
)と空白以外の文字(\\\\S
)の組み合わせで、改行も含めて全ての文字に一致します。
例: "a\\\\nb\\\\nc"
という文字列で "a" から "c"
までの全ての文字に一致させたい場合。
a[\\\\s\\\\S]*c
/m
フラグ)/m
フラグは、^
や $
が各行の開始や終了に一致するように設定するものです。これは、単に改行に依存する処理に対して有効ですが、.
には影響しません。
例: 各行の先頭にマッチさせたい場合。
^abc/m
例えば、次のテキストに対してマッチさせる場合を考えます。
テキスト:
apple
banana
cherry
apple.*cherry/s
この場合、/s
フラグがあることで、apple
から cherry
まで全ての文字列がマッチします。
[\\\\s\\\\S]
を使って改行を含めたマッチapple[\\\\s\\\\S]*cherry
このパターンでも同様に、改行を含むすべての文字がマッチします。