gpt4 book ai didi

java - 带有模式/匹配器的 IllegalStateException

转载 作者:行者123 更新时间:2023-12-01 17:01:42 25 4
gpt4 key购买 nike

我正在使用Matcher在 Java 中使用正则表达式捕获组,它不断抛出 IllegalStateException 即使我知道表达式匹配。

这是我的代码:

String safeName = Pattern.compile("(\\.\\w+)$").matcher("google.ca").group();

我期望 safeName.ca ,如使用正则表达式中的捕获组捕获的那样,但我得到:

IllegalStateException: No match found

我还尝试了 .group(0).group(1) 但出现了同样的错误。

根据 group() 的文档和group(int group):

Capturing groups are indexed from left to right, starting at one. Group zero denotes the entire pattern, so the expression m.group(0) is equivalent to m.group().

我做错了什么?

最佳答案

Matcher 是帮助程序类,它处理数据迭代以搜索与正则表达式匹配的子字符串。整个字符串有可能包含许多可以匹配的子字符串,因此通过调用 group() 你无法指定你感兴趣的实际匹配。为了解决这个问题,Matcher 可以让你迭代所有匹配的子字符串,然后使用您感兴趣的部分。

因此,在使用 group 之前,您需要让 Matcher 迭代您的字符串以 find() 匹配您的正则表达式。要检查正则表达式是否匹配整个字符串,我们可以使用 matches() 方法而不是 find()

通常是为了查找我们正在使用的所有匹配子字符串

Pattern p = Pattern.compiler("yourPattern");
Matcher m = p.matcher("yourData");
while(m.find()){
String match = m.group();
//here we can do something with match...
}

由于您假设要查找的文本在字符串中仅存在一次(在其末尾),因此您不需要使用循环,但简单的 if (或条件运算符)应该可以解决你的问题。

Matcher m = Pattern.compile("(\\.\\w+)$").matcher("google.ca");
String safeName = m.find() ? m.group() : null;

关于java - 带有模式/匹配器的 IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27301567/

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