import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import amdocs.mcfw.constants.McConstants.MappingRegExConstants;
public class RegExTest {
public static final String DECLARATION_REGEX = "(int|long)\\s*(\\S+);";
public static void main(String[] args) {
String str = "int a;";
Pattern p = Pattern.compile(DECLARATION_REGEX);
Matcher matcher = p.matcher(str);
System.out.println(matcher);
printGroups(matcher);
}
private static void printGroups(Matcher m) {
System.out.println(m.find());
for (int i = 0; i < m.groupCount(); i++) {
System.out.println(i +": " +m.group(i));
}
}
}
上面的代码说明了一个RegEx来匹配一个声明指令,我希望输出中的3个组如下所示。
0:int a - &gt;完全匹配
1:int - &gt;型
2:a - &gt; Var名称
但我只得到前两组而不是第三组。实际上我已经尝试了很多问题的变化,似乎RegEx引擎总是丢弃最右边编号的组,直到你用另一个编号组明确地包装最右边编号的组,即在我们的例子中重写“(\\ S +)”as “((\\ S +))”解决了这个问题。
但问题是,如果根据文档,您在圆括号下定义的内容将被捕获为一个数字组,为什么我们必须用两组括号覆盖最右边的组?
答案 0 :(得分:0)
我没有遍历所有组。事实上,regEx引擎始终将整个匹配作为第0组意味着groupCount将始终比预期组多一个。