为什么Groovy不会在我的正则表达式中使用“OR”实例?

时间:2015-11-24 11:09:33

标签: regex groovy

众所周知,正则表达式中的“|”是“OR”运算符。所以当我运行时:

static void main(String[] args) {
    String permission = "[fizz]:[index]"
    if((permission =~ /\[fizz|buzz]:\[.*]/).matches()) {
        println "We match!"
    } else {
        println "We don't match!"
    }
}

...那为什么要打印“我们不匹配!”???

1 个答案:

答案 0 :(得分:5)

正则表达式\[fizz|buzz]:\[.*]匹配:

  • \[fizz - 文字[后跟fizz
  • | - 或运营商....
  • buzz]:\[ - 匹配文字buzz]:[
  • .* - 任何字符,但换行符,尽可能多次,贪婪
  • ] - 文字]

我认为您需要重新组合替代方案:

if((permission =~ /\[(?:fizz|buzz)]:\[[^\]]*]/).matches()) {

此处\[(?:fizz|buzz)]:\[[^\]]*]将匹配[,然后匹配fizzbuzz而不捕获字词,然后]:[[^\]]*将匹配0个或多个字符,但]然后]

检查regex101 demo。另请查看OCP Regex Visualizer

enter image description here