为什么Groovy不会在我的正则表达式中表示"OR"实例?

sme*_*eeb 2 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!"
    }
}
Run Code Online (Sandbox Code Playgroud)

...然后为什么打印" 我们不匹配! "???

Wik*_*żew 5

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

  • \[fizz- 字面[跟随fizz
  • | - OR运算符....
  • buzz]:\[ - 匹配文字 buzz]:[
  • .* - 任何角色,但换行,尽可能多次,贪婪
  • ]- 文字].

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

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

在此,\[(?:fizz|buzz)]:\[[^\]]*]将匹配[,那么无论fizzbuzz而不捕获的话,然后]:[,[^\]]*将匹配0个或多个的任何字符,但一个],然后].

检查regex101演示.还在OCP Regex Visualizer上查看:

在此输入图像描述