①最大一致(欲張り)と最小一致(無欲)
「*」「+」などの量指定子は、マッチが行末まで進む欲張りマッチングになる。
※以下例示。
「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 |