LoginSignup
1
3

More than 3 years have passed since last update.

【正規表現】最大最小一致/グループ化/先読み後読み

Posted at

①最大一致(欲張り)と最小一致(無欲)

「*」「+」などの量指定子は、マッチが行末まで進む欲張りマッチングになる。

※以下例示。
「C:\Users\test\Desktop」に対し、
「C:.*\」で検索すると、
「C:\Users\test\」にマッチする。

最後のマッチ以外で止めたい場合は、無欲なマッチングを利用する。

最大一致(欲張り) 最小一致(無欲)
* *?
+ +?
? ??
{n,} {n,}?
{n,m} {n,m}?

※以下例示。
「C:\Users\test\Desktop」に対し、
「C:\」にマッチさせたい場合、
「C:.*?\」で検索する。

「C:\Users\test\Desktop」に対し、
「C:\Users\」にマッチさせたい場合、
「C:(.*?\){2}」で検索する。

②グループ化とキャプチャ

「()」にはグループ化とキャプチャの2機能がある。

・グループ化
複数文字を1つの文字列として表現できる。
WindowsとWindows10のどちらにもマッチしたい場合、
量指定子を利用して、「Windows(10)?」として表現できる。

・キャプチャ
マッチしたグループを置換後の文字列として利用できる。
「This is a pen.」を「This is my pen.」に変換する場合、
「(This is )a( pen.)」で検索し、「\$1my$2」で置換できる。
このように、マッチした文字列を置換後に利用できる。

③先読みと後読み

「パターンにマッチした位置」にマッチさせる方法。

・先読み
「×××(?=〇〇〇)」として記述する。
「後ろに〇〇〇が続く×××」という意味。

※以下例示。
「\w+(?= tea)」で検索する。
「☆」の行の1単語目にヒットする。

マッチ テキスト
lemon tea
milk tea
milk coffee

・否定先読み
「(?!〇〇〇)」として記述する。
「後ろに〇〇〇が続かない×××」という意味。

※以下例示。
「\w+(?= (?!tea))」で検索する。
「☆」の行の1単語目にヒットする。

マッチ テキスト
lemon tea
milk tea
milk coffee

・後読み
「(?<=〇〇〇)×××」として記述する。
「前に〇〇〇がある×××」という意味。

※以下例示。
「(?<=good )\w+」で検索する。
「☆」の行の2単語目にヒットする。

マッチ テキスト
good mornig
good evening
bad morning

・否定後読み
「(?<!〇〇〇)」として記述する。
「前に〇〇〇がない×××」という意味。

※以下例示。
「(?<=(?<!good) )\w+」で検索する。
「☆」の行の2単語目にヒットする。

マッチ テキスト
good mornig
good evening
bad morning
1
3
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
1
3