众所周知,|正则表达式中的" 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)
...然后为什么打印" 我们不匹配! "???
正则表达式\[fizz|buzz]:\[.*]匹配:
\[fizz- 字面[跟随fizz| - OR运算符....buzz]:\[ - 匹配文字 buzz]:[.* - 任何角色,但换行,尽可能多次,贪婪]- 文字].我认为你需要重新组合替代方案:
if((permission =~ /\[(?:fizz|buzz)]:\[[^\]]*]/).matches()) {
Run Code Online (Sandbox Code Playgroud)
在此,\[(?:fizz|buzz)]:\[[^\]]*]将匹配[,那么无论fizz或buzz而不捕获的话,然后]:[,[^\]]*将匹配0个或多个的任何字符,但一个],然后].
检查regex101演示.还在OCP Regex Visualizer上查看: