将字符串对象传递到regex(Java)中,尝试匹配模式[已关闭]

rsl1atfo  于 2023-03-16  发布在  Java
关注(0)|答案(1)|浏览(93)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
8小时前关门了。
Improve this question
我尝试用regex进行模式匹配,我尝试用两种方法将String对象传递给正则表达式,如下所示:

String text = "Hello world!"
String endText = "world!"

//Method 1
text.matches(".*" + endText + "$");

//Method 2
Pattern pt = Pattern.compile(".*" + endText + "$");
Matcher mt = pt.matcher(text);

return mt.matches();

我期望一个布尔返回值,但两次我都收到这个错误:
Unclosed group near index 6 .\*:-($
我哪里做错了?

kiayqfof

kiayqfof1#

正则表达式中有很多字符是特殊字符,(字符就是其中之一。
如果在正则表达式中放入未转义、未加引号的(,则必须包含相应的)
一个解决办法是引用你的文字:

//Method 1
text.matches(".*" + Pattern.quote(endText) + "$");

//Method 2
Pattern pt = Pattern.compile(".*" + Pattern.quote(endText) + "$");

一个更好的解决方案是在不需要正则表达式时避免使用它们。这些方法可能看起来很短,但正则表达式匹配是一个相当昂贵的操作。在您的情况下,您可以只使用String的endsWith方法:

return text.endsWith(endText);

相关问题