如何使用Groovy的正则表达式获取部分匹配的布尔值?

Ant*_*ean 4 regex groovy

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)

两个问题...

  1. 什么是“严格匹配”?
  2. 如何在不向表达式中添加大量垃圾的情况下获取布尔值?

Wik*_*żew 6

'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)

返回true