29
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VS Codeで複数行に渡って正規表現を利用する

Last updated at Posted at 2021-03-04

VS Codeでよく正規表現による検索や置換を行うが、通常、正規表現では1行ごとに適用されるため、複数行に渡って検索したい場合、明示的に\nを指定する必要がある。
しかし、検索したいパターンに何行分の改行があるかわからない場合もあるため、\nを任意回許容したいという需要がある。

具体例を見ていこう。

テキスト
ドバト カワラバト rock dove
キジバト 神
カワセミ KF
ハクセキレイ セグロセキレイ
トビ トンビ 鳶
ドバト カワラバト rock dove
キジバト 神
カワセミ KF
ハクセキレイ セグロセキレイ
トビ トンビ 鳶

このテキストでカワラバトからトンビまで検索したいとする。
結論からいうと次の正規表現で検索できる。

正規表現
カワラバト[\s\S\n]*?トンビ
  • \s: 空白文字を表す。[ \t\n\r\f]と同じ
  • \S: 非空白文字を表す。[ \t\n\r\f]以外の一文字。
  • \n: 改行文字を表す。\sで代用できそうだけど、1行ごとに検索するせいで明示的に入れないと駄目みたい。
  • *?: 最小一致検索。この例だと2つみつかる。
    • ちなみに?を外すと最長一致検索。この例だと1つみつかる

スクリーンショット 2021-03-04 12.36.35.png

結論: 検索したい開始文字[\s\S\n]*?検索したい終了文字で表現できる

おまけ: 検索された表現を使って置換したい場合

検索された表現を使って置換したい場合、取得したいパターンを()で囲んで、$1,$2と順に取得できる。
たとえば、(カワラバト[\s\S\n]*?)神([\s\S\n]*?トンビ)$1God$2で置換すると、このパターンを満たす「神」だけが「God」に置換されます。
これは、$1で最初の括弧、$2で次の括弧にマッチしたパターンが取得されるためです。

29
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
23

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?