gpt4 book ai didi

java - 如何使用 find() 而不改变 Matcher 的状态?

转载 作者:行者123 更新时间:2023-12-02 12:55:04 25 4
gpt4 key购买 nike

我有以下代码:

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

DEMO

关于java - 如何使用 find() 而不改变 Matcher 的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44462374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com