希望这使第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
}
只有一组: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
}
现在还有两个组。
输出:
group#0: 123456
group#1: 1
group#2: 6
我向您推荐此文档:课程:正则表达式。真正从第一章开始,自己尝试例子。
额外的: