Groovy有一个正则表达式“匹配运算符”(==~
)。 documentation表示它返回一个布尔值,但需要“严格匹配”。它没有定义“严格匹配”。
我不熟悉此表达式为false
的任何正则表达式系统。但是,这就是Groovy告诉我的。
'foo-bar-baz' ==~ /bar/ // => false
查找运算符(=~
)返回Matcher
,显然可以为匹配和捕获组编制索引。但是,我必须编写一个显式测试,让这个表达式返回一个布尔值。
('foo-bar-baz' =~ /bar/)[0] != null // => true
两个问题......
答案 0 :(得分:3)
'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=]
请参阅此Groovy demo
如果您需要检查部分匹配,则无法避免构建 Matcher
对象:
使用查找运算符
=~
构建java.util.regex.Matcher
实例def text = "some text to match" def m = text =~ /match/ assert m instanceof Matcher if (!m) { throw new RuntimeException("Oops, text not found!") }
if (!m)
相当于调用if (!m.find())
或者,您可以使用!
两次将结果转换为正确的布尔值:
println(!!('foo-bar-baz' =~ /bar/))