Java Regex无法正确匹配

Hos*_*diq 3 java regex string

我需要检查一个字符串是否有自己的等号.我现在的正则表达式似乎在Java中不起作用,即使RegexPal匹配它.

我目前的代码是:

String str = "test=tests";
System.out.println(str + " - " + str.matches("[^=]=[^=]"));
Run Code Online (Sandbox Code Playgroud)

在以下测试用例中,第一个应匹配,第二个不应:

test=tests // matches t=t
test==tests // doesn't match
Run Code Online (Sandbox Code Playgroud)

Regex Pal做得对,但是,由于某些原因,Java在两个测试用例中都返回false.我在某个地方出错了吗?

谢谢!

ken*_*ytm 6

Java的String.matches函数匹配整个字符串,而不仅仅是一个部分.这意味着,它大致相当于正则表达式^[^=]=[^=]$,因此两者都返回false.要构建与您的正则表达式相同的正则表达式,您应该使用:

str.matches("(?s).*[^=]=[^=].*")
Run Code Online (Sandbox Code Playgroud)

((?s)确保.匹配一切.)

或者,您可以构建模式并使用Matcher获得更大的灵活性.这是String.matches使用的.

final Pattern p = Pattern.compile("[^=]=[^=]");
final Matcher m = p.matcher(str);
return m.find();
Run Code Online (Sandbox Code Playgroud)