Java 如何使用find()而不更改;匹配器';什么州?
我有以下代码:Java 如何使用find()而不更改;匹配器';什么州?,java,regex,matcher,Java,Regex,Matcher,我有以下代码: 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.fin
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()
中捕获的字符串;但是被调用的方法会在匹配器的输入中查找它。您不能告诉匹配器不要使用捕获组,但是您可以将其重置为放弃其内部状态,然后从字符串的开头重新开始:
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
方法1和方法2中的代码是什么?输入字符串是什么?请提供MCVE,以便我们可以粘贴代码并查看其工作原理。添加详细信息:1)出现了什么问题,2)它应该是什么样子。“
\G(?=pattern)
“但它不起作用”是一种错误的反馈-为什么不起作用?它匹配以pattern
开头的字符串的开头。您是否尝试过匹配器.reset()
?我需要保持以前的状态。我需要记住上次匹配的结束位置。reset()丢弃\G
的位置,但我需要它。我无法从输入的开头重新开始。