これにより、グループ 0がより明確になることを願っています。
例:
String str = "start123456end"; // Your input String
// Group#1 Group#2
// | |
Pattern p = Pattern.compile("start([0-9]*)(end)");
// |<--- Group#0 --->|
Matcher m = p.matcher(str); // Create a matcher for regex and input
while( m.find() ) // As long as your regex matches something
{
System.out.println("group#0:\t" + m.group()); // Or: m.group(0)
System.out.println("group#1:\t" + m.group(1));
System.out.println("group#2:\t" + m.group(2));
}
出力:
group#0: start123456end
group#1: 123456
group#2: end
正規表現の一部をグループに「保存」できます。私の例では、それらのうちの 3 つがあります (グループは と の間に(
あり)
ます):
- グループ 1:開始語と終了語の間の数字。
- グループ 2:末尾の単語のみ
- グループ 0:パターンに一致するすべてのものです。グループ 0 は予約されており、常に一致全体を返しますが、他のすべてはオプションであり、ユーザーが定義します。
あなたのコードによると:
例:
Matcher m = Pattern.compile("[0-9]*").matcher("123456end"); // Matches all numbers
if( m.find() )
{
System.out.println(m.group(0)); // m.group() possible too
}
グループは 1 つだけです: 0
!
出力: 123456
(= グループ 0)
次に、さらにいくつかのグループをパターンに入れましょう。
コード:
// Group#1 Group#2
// | |
Matcher m = Pattern.compile("([0-9])[0-9]([0-9])*").matcher(str); // Matches all numbers
// |<---- Group#0 ---->|
if( m.find() )
{
System.out.println("group#0:\t" + m.group(0)); // m.group() possible too
System.out.println("group#1:\t" + m.group(1)); // 1st digit
System.out.println("group#2:\t" + m.group(2)); // 3rd digit
}
現在、あと 2 つのグループがあります。
出力:
group#0: 123456
group#1: 1
group#2: 6
このドキュメントをお勧めします:レッスン: 正規表現。実際に最初の章から始めて、自分で例を試してみてください。
追加: