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

时间:2015-03-12 15:16:29

标签: java regex

我正在尝试创建一个非常简单的正则表达式语句来告诉我String是否包含匹配项。

正则表达式声明:

%.+%

我正在扫描的字符串:

"Property:%substitute.candidate%_substitute.candidate%End"

我使用了在线工具来验证我的工作,并使用提供的Regex和给定的String匹配。但是当我在我的Java程序中运行它时,它不会返回匹配。

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

if(replacedString.matches(regex)){}

任何人都可以解释它无法正常工作的原因吗?

3 个答案:

答案 0 :(得分:2)

问题就是当您使用matches()时,引擎会添加^$锚点,以便您的字符串必须完全匹配

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

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

编辑:根据@ Pshemo的评论,你需要这样做:

Pattern pattern = Pattern.compile("%.+%");
String str = "...";
Matcher matcher = pattern.matcher(str);
if(matcher.find()) {
    ...
}

答案 1 :(得分:2)

matches()期望ENTIRE字符串匹配。

您想要的是PatternMatcher

Pattern p = Pattern.compile("%.+%");
Matcher m = p.matcher("Property:%substitute.candidate%_substitute.candidate%End");
if (m.find()) { // found it }

答案 2 :(得分:1)

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