公认的是,正则表达式中的“ |”是“ OR”运算符。所以当我运行这个:

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


...然后为什么打印“我们不匹配!”

最佳答案

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


\[fizz-文字[后跟fizz
|-或运算符...。
buzz]:\[-匹配文字buzz]:[
.*-除换行符以外的任何字符,请尽可能多地贪婪
]-文字]


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

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


在这里,\[(?:fizz|buzz)]:\[[^\]]*]将匹配[,然后fizzbuzz而不捕获单词,然后]:[[^\]]*将匹配0个或多个除]之后的任何字符,然后匹配。

检查regex101 demo。还检查了OCP Regex Visualizer

regex - 为什么Groovy不接受我的正则表达式中的“OR”实例?-LMLPHP

关于regex - 为什么Groovy不接受我的正则表达式中的“OR”实例?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33892052/

10-16 06:52