我需要检查一个字符串是否有自己的等号.我现在的正则表达式似乎在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.我在某个地方出错了吗?
谢谢!
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)