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
的位置,但我需要它。我无法从输入的开头重新开始。