Java 匹配模式与计算等式的区别

Java 匹配模式与计算等式的区别,java,regex,groovy,Java,Regex,Groovy,在正则表达式(Groovy)中,有人告诉我们“==~”运算符与 ==,但匹配模式而不是“计算相等” 你能用一个小例子帮助我理解这两者之间的实际区别吗?“potatoe”==“potatoe”实际上是: boolean result = ("potatoe"=="potatoe") //Compare Strings (GStrings in groovy) “potatoe”==~“potat.*”表示: 在第一个示例中,如果将“potatoe”与“potat.*”进行比较,结果将为false

在正则表达式(Groovy)中,有人告诉我们“==~”运算符与 ==,但匹配模式而不是“计算相等” 你能用一个小例子帮助我理解这两者之间的实际区别吗?

“potatoe”==“potatoe”实际上是:

boolean result = ("potatoe"=="potatoe") //Compare Strings (GStrings in groovy)
“potatoe”==~“potat.*”表示:


在第一个示例中,如果将“potatoe”与“potat.*”进行比较,结果将为false,因为这两个字符串不相等。第二个示例使用了匹配,因此“potat.*”不再是一个简单的字符串,而是一个正则表达式和结果将为true。

x==y
x.equals(y)
x.compareTo(y)
的缩写,请参见(在java中,这基本上比较对象标识)

运算符
==~
是专门设计的比较运算符,用于帮助您对字符串上的模式进行完全匹配

为操作员生成的代码(例如,disasm代码
'xxx'==~/xx?/
)为:

发件人:

由于匹配器通过调用其find方法强制使用布尔值,=~运算符与Perl的=~运算符作为谓词出现时的简单用法一致(在“if”、“while”等中)。“外观更为严格的”==~运算符需要与整个主题字符串完全匹配。它返回一个布尔值,而不是匹配器


注意,所讨论的运算符是
==~
,而不是
==~
,这意味着其他生成的代码。
Pattern p = Pattern.compile("potat.*");
Matcher m = p.matcher("potatoe");
boolean result = m.matches();
ScriptBytecodeAdapter.matchRegex("xxx", "xx?")