Groovy具有正则表达式“匹配运算符”(==~)。该文件说,它返回一个布尔值,但需要“严格匹配”。它没有定义“严格匹配”。
我对这个表达式所在的任何正则表达式系统都不熟悉false。但是,这就是Groovy告诉我的。
'foo-bar-baz' ==~ /bar/ // => false
Run Code Online (Sandbox Code Playgroud)
查找运算符(=~)返回一个Matcher,显然可以为匹配项和捕获组建立索引。但是,我必须编写一个显式测试以使该表达式返回布尔值。
('foo-bar-baz' =~ /bar/)[0] != null // => true
Run Code Online (Sandbox Code Playgroud)
两个问题...
该'foo-bar-baz' ==~ /bar/等于"foo-bar-baz".matches("bar"),也就是说,它需要一个完整的字符串匹配。
该=~运营商允许部分匹配,也就是说,它可能会发现在字符串中匹配/匹配。
因此:
println('foo-bar-baz' ==~ /bar/) // => false
println('bar' ==~ /bar/) // => true
println('foo-bar-baz' =~ /bar/) // => java.util.regex.Matcher[pattern=bar region=0,11 lastmatch=]
Run Code Online (Sandbox Code Playgroud)
观看此Groovy演示
如果需要检查部分匹配项,则无法避免构建Matcher对象:
使用find运算符
=~构建java.util.regex.Matcher实例def text =“一些要匹配的文本” def m =文字=〜/ match / 断言Matcher的实例 如果(!m){ 抛出新的RuntimeException(“糟糕,找不到文本!”) }
if (!m)相当于打电话if (!m.find())
或者,您可以使用!两次将结果强制转换为正确的布尔值:
println(!!('foo-bar-baz' =~ /bar/))
Run Code Online (Sandbox Code Playgroud)