我有以下代码:
class someclass {
Pattern pattern1 = Pattern.compile("\\G regex1");
Pattern pattern2 = Pattern.compile("\\G regex2");
Matcher matcher;
public void parse(str) {
matcher = pattern1.matcher(str);
if(matcher.find() {
method1();
}
else if(matcher.usePattern(pattern2).find())
method2();
}
}
是否可以在不消耗捕获组的情况下测试匹配?我试图匹配前瞻模式"\G(?=pattern)"
,但它不起作用。我需要父方法parse()
和被调用方法method1()
或method2()
中捕获的字符串;但被调用的方法在匹配器的输入处查找它。
答案 0 :(得分:1)
您不能告诉匹配器不要使用捕获组,但是您可以重置它以丢弃其内部状态并从字符串的开头重新开始:
Pattern p = Pattern.compile("(\\d)"); // single digit
String myString = "12345";
Matcher matcher = p.matcher(myString);
if(matcher.find()) { // expecting 1
System.out.println(matcher.group(1));
}
if(matcher.find()) { // expecting 2
System.out.println(matcher.group(1));
}
if(matcher.find()) { // expecting 3
System.out.println(matcher.group(1));
}
matcher.reset(); // discard internal state, next find() will return 1 again
if(matcher.find()) { // expecting 1
System.out.println(matcher.group(1));
}
输出:
1
2
3
1