documentation提到了三个正则表达式特定的运算符:
~
的Pattern
=~
重现Matcher
==~
返回boolean
现在,我该如何否定最后一个? (我同意其他人不能有任何有意义的否定。)
我尝试了显而易见的想法:
println 'ab' ==~ /^a.*/ // true: yay, matches, let's change the input
println 'bb' ==~ /^a.*/ // false: of course it doesn't match, let's negate the operator
println 'bb' !=~ /^a.*/ // true: yay, doesn't match, let change the input again
println 'ab' !=~ /^a.*/ // true: ... ???
我猜最后两个应该这样解释:
println 'abc' != ~/^b.*/
在这里我可以看到
new String("abc") != new Pattern("^b.*")
是true
。 最佳答案
AFAIK,在Groovy中没有否定的正则表达式匹配运算符。
因此,正如cfrick已经提到的那样,最好的答案似乎是否定整个表达式:
println !('bb' ==~ /^a.*/)
另一个解决方案是将正则表达式反转,但在我看来,它的可读性较差:
How can I invert a regular expression in JavaScript?
关于regex - 如何否定Groovy Match运算符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30081919/