Valid Regex语句在Java中不是有效的匹配项

Valid Regex语句在Java中不是有效的匹配项,java,regex,Java,Regex,我试图创建一个非常简单的正则表达式语句来告诉我字符串是否包含匹配项 Regex声明: %.+% 我正在扫描的字符串: "Property:%substitute.candidate%_substitute.candidate%End" 我使用了在线工具来验证我的工作,并使用提供的正则表达式和给定的字符串来验证它是否匹配。但是,当我在Java程序中运行它时,它不会作为匹配项返回 在我的Java代码中,我使用以下内容来匹配字符串 if(replacedString.matches(regex))

我试图创建一个非常简单的正则表达式语句来告诉我字符串是否包含匹配项

Regex声明:

%.+%
我正在扫描的字符串:

"Property:%substitute.candidate%_substitute.candidate%End"
我使用了在线工具来验证我的工作,并使用提供的正则表达式和给定的字符串来验证它是否匹配。但是,当我在Java程序中运行它时,它不会作为匹配项返回

在我的Java代码中,我使用以下内容来匹配字符串

if(replacedString.matches(regex)){}
有人能解释一下它不工作的原因吗?

问题是,当您使用
matches()
时,引擎将添加
^
$
锚定,以便字符串必须精确匹配

在您的情况下,
匹配的
期望字符串以
%
开头和结尾,但实际情况并非如此

要解决此问题,请使用
find()

编辑:根据@Pshemo的评论,您需要执行以下操作:

Pattern pattern = Pattern.compile("%.+%");
String str = "...";
Matcher matcher = pattern.matcher(str);
if(matcher.find()) {
    ...
}
matches()
要求匹配整个字符串

你想要的是一个和


字符串#matches()以正则表达式作为参数,^和$是隐式锚点。因此,matches方法匹配整个字符串。您可以选择这样匹配整个字符串:mystring.matches(“.your_regex”);或者尝试将模式/匹配器与前面的答案中提到的查找/替换结合使用

String
没有可能让OP感到困惑的
find
方法。@Pshemo:我明白你的意思,我想他已经在使用
模式
类了。根据您的建议修改了我的答案。您也应该调整您的regexp,因为它使用了一种饥饿的方法,因此请尝试
%[^%]+%
而不是
%.+%
正确。现在,不要把它作为评论(不是每个人都会读)发布在你的帖子上,而是把这个解释放在那里。非常感谢,这是一个很好的解释。太棒了,很高兴它有帮助了
:)
Pattern p = Pattern.compile("%.+%");
Matcher m = p.matcher("Property:%substitute.candidate%_substitute.candidate%End");
if (m.find()) { // found it }