这让我困惑了最后15分钟:
if ('ab' =~ /^a|b$/) { print 't' } else { print 'f' }
print "\n";
我原本期望开头后跟'a'或'b',后面跟结尾,应该只匹配一个字符。所以测试应该失败两个字符'ab'。但它成功了。为什么呢?
答案 0 :(得分:12)
如果您对交替进行分组,那么您将获得预期的行为:
extratime = np.int64(extratime)
您的正则表达式会在字符串的开头(/^(a|b)$/
分支)或a
末尾(^a
分支)找到b
。
当您使用b$
时,锚点将应用于整个组,因此它将匹配等于^(a|b)$
或a
的字符串。
此外,如果您确实不需要捕获该值,则可以使用non-capturing group,b
或n
modifier,/^(?:a|b)$/
。
答案 1 :(得分:4)
您的正则表达式与^a
或b$
匹配,因为替代运算符|
的优先级低于连续正则表达式序列。
在这种特殊情况下(单个字符的替代),您可以将其简化为类:
/^[ab]$/