这让我困惑了最后15分钟:
if ('ab' =~ /^a|b$/) { print 't' } else { print 'f' }
print "\n";
Run Code Online (Sandbox Code Playgroud)
我期望在开头之后跟随结尾的'a'或'b'应该只匹配一个字符.所以测试应该失败两个字符'ab'.但它成功了.为什么?
Wik*_*żew 12
如果您对交替进行分组,那么您将获得预期的行为:
/^(a|b)$/
Run Code Online (Sandbox Code Playgroud)
你的正则表达式会a在字符串的开头(带^a分支)或b结尾(带b$分支)找到一个.
使用时^(a|b)$,锚点应用于整个组,因此它将匹配等于a或的字符串b.
另外,如果你不是真的需要捕捉的价值,你既可以使用非捕获组,/^(?:a|b)$/或n修改,/^(a|b)$/n.