正規表現のキャプチャグループ、名前付きグループ、後方参照

正規表現のキャプチャグループ (abc)、非キャプチャグループ (?:abc)、名前付きグループ (?<name>abc)、後方参照 \1 を学びましょう。マッチした部分文字列の抽出と再利用。

Groups

詳細な説明

キャプチャグループと後方参照

グループはマッチの一部を抽出し、複数文字のシーケンスに量指定子を適用するために不可欠です。異なるグループタイプを理解することで、強力なパターンマッチング能力が解放されます。

キャプチャグループ (...)

括弧でキャプチャグループを作成します。各グループはマッチしたテキストをキャプチャし、1から始まるインデックスでアクセスできます。

Pattern: (\d{3})-(\d{4})
Input:   555-1234
Group 1: 555
Group 2: 1234

非キャプチャグループ (?:...)

量指定子のためにグルーピングが必要だがテキストのキャプチャは不要な場合、(?:...) を使います。より効率的で、グループの番号付けがクリーンになります。

Pattern: (?:ab)+c
Matches: abc, ababc, abababc

名前付きキャプチャグループ (?...)

名前付きグループはパターンを自己文書化します。JavaScriptでは match.groups.name でアクセスできます。

Pattern: (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})
Input:   2024-01-15
groups.year:  2024
groups.month: 01
groups.day:   15

後方参照

後方参照は、前のグループでキャプチャされたものと同じテキストにマッチします。\1 はグループ1、\2 はグループ2を参照します。

Pattern: (\w+) \1
Matches: "the the", "go go"(重複した単語)

名前付き後方参照は \k<name> を使います:

Pattern: (?<word>\w+) \k<word>
名前付き参照で同じ結果

グループ内の選択

グループ内のパイプ | で選択を作成します:(cat|dog) は "cat" または "dog" にマッチします。キャプチャ値が不要な場合は非キャプチャグループと組み合わせます:(?:cat|dog)s?

ユースケース

日付、電話番号、ログエントリなどの構造化テキストを解析して特定のコンポーネントを抽出する必要がある場合。後方参照は重複した単語の検出やペアの区切り文字のマッチングに便利です。

試してみる — Regex Cheat Sheet

フルツールを開く