キャプチャとグループ化
キャプチャグループを (pattern)
作成グループい取り込む性質を。
よく見られる(そして使用される)関連するものはです(?:pattern)
。これは、プロパティをキャプチャせずにグループを作成するため、非キャプチャグループと呼ばれます。
グループは通常、パターンのシーケンスを繰り返す必要がある場合に使用されます。たとえば(\.\w+)+
、^(0*1|1*0)$
(^
、次に、0*1
または1*0
次に$
)と^0*1|1*0$
(^0*1
または1*0$
)のように、交替が有効になる場所を指定するために使用されます。
キャプチャグループは、グループ化とは別に、キャプチャグループ内のパターンに一致するテキストも記録します(pattern)
。の例を使用すると、は(.*):
、.*
ととABC
を:
一致し:
、.*
はキャプチャグループ内にあるため、(.*)
テキストABC
はキャプチャグループ1に記録されます。
グループ番号
パターン全体は、グループ番号0 として定義されています。
パターン内のキャプチャグループは、1からインデックスを開始します。インデックスは、キャプチャグループの左括弧の順序によって定義されます。例として、以下のパターンの5つのキャプチャグループすべてを次に示します。
(group)(?:non-capturing-group)(g(?:ro|u)p( (nested)inside)(another)group)(?=assertion)
| | | | | | || | |
1-----1 | | 4------4 |5-------5 |
| 3---------------3 |
2-----------------------------------------2
グループ番号は\n
、パターンおよび$n
置換文字列の後方参照で使用されます。
他の正規表現フレーバー(PCRE、Perl)では、サブルーチン呼び出しで使用することもできます。
特定のグループに一致するテキストにでアクセスできますMatcher.group(int group)
。グループ番号は、上記のルールで識別できます。
一部の正規表現フレーバー(PCRE、Perl)には、 ブランチリセット機能があります。これにより、同じ番号を使用して、交互の異なるブランチのグループをキャプチャできます。
グループ名
Java 7から、 名前付きキャプチャグループをと (?<name>pattern)
一致するコンテンツにアクセスできますMatcher.group(String name)
。正規表現は長くなりますが、コードは、正規表現と一致または抽出しようとしているものを示しているため、より意味があります。
グループ名は\k<name>
、パターンおよび${name}
置換文字列の後方参照で使用されます。
名前付きのキャプチャグループには、同じ番号付け方式で番号が付けられているため、からもアクセスできますMatcher.group(int group)
。
内部的には、Javaの実装は名前からグループ番号にマップするだけです。したがって、2つの異なるキャプチャグループに同じ名前を使用することはできません。