为什么^和$不按预期工作?

时间:2017-01-13 09:52:42

标签: regex perl

这让我困惑了最后15分钟:

if ('ab' =~ /^a|b$/) { print 't' } else { print 'f' }
print "\n";

我原本期望开头后跟'a'或'b',后面跟结尾,应该只匹配一个字符。所以测试应该失败两个字符'ab'。但它成功了。为什么呢?

2 个答案:

答案 0 :(得分:12)

如果您对交替进行分组,那么您将获得预期的行为:

extratime = np.int64(extratime)

您的正则表达式会在字符串的开头(/^(a|b)$/ 分支)或a末尾(^a分支)找到b

当您使用b$时,锚点将应用于整个组,因此它将匹配等于^(a|b)$a的字符串。

此外,如果您确实不需要捕获该值,则可以使用non-capturing groupbn modifier/^(?:a|b)$/

答案 1 :(得分:4)

您的正则表达式与^ab$匹配,因为替代运算符|的优先级低于连续正则表达式序列。

在这种特殊情况下(单个字符的替代),您可以将其简化为类:

/^[ab]$/