正規表現で複数行にわたるテキストを扱う場合、通常の正規表現の設定では改行文字(\\\\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
このパターンでも同様に、改行を含むすべての文字がマッチします。