Help us understand the problem. What is going on with this article?

正規表現の例文-複数行にまたがる処理

◆ 目的

正規表現は普通に書くと1行単位で検索されてしまいますが、
改行を含んだ複数行にまたがる対象を検索、置換したい場合は
下記のように指定します。

◆ 検索対象

文章のここから
2行目
3行目
4行目ここまで
を対象とする場合
ここからここまで

◆ 検索文字列

ここから[\s\S]*?ここまで

◆ 検索結果

文章のここから
2行目
3行目
4行目ここまで

を対象とする場合
ここからここまで

◆ 解説

分解して考えます。
ここから [\s\S] *? ここまで

まずは、下記の文字列を探索します。

ここから

この文字列から対象範囲が開始されます。
次に、[ ]で、中の文字のいずれか1字という意味になります。

[\s\S]

の、それぞれの意味は、

  • \s 垂直タブ以外のすべての空白文字 改行を含む
  • \S \s 以外のすべて

となります。この2つを[ ]で囲むことで、

  • [\s\S] 改行を含む全ての文字1字

という意味になります。

*?

上記の文字を*で0文字以上繰り返します、*だけだと最長マッチになるため
?をつけることで最小マッチ(条件に合う最も短い範囲)にすることができます。

ここまで

最後に、この文字列が最初にでたら探索終了となります。

◆ 補足

ここから[\s\S]*ここまで

最小マッチの?をつけないと、

文章のここから
2行目
3行目
4行目ここまで
を対象とする場合
ここからここまで

となります。

officemove
・教育コンテンツ ・スマートフォン向けのアプリ ・VR,AR,Kinect,測域センサー,ウェアラブルデバイスを使ったイベント向けコンテンツ などの企画制作をやっています。
https://officemove.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away