为什么这个正则表达式无法匹配?

时间:2010-12-07 20:14:38

标签: .net regex

Regex.IsMatch("ab", @"^(?:(a)|\1b)$") == False

所以它尝试匹配a,成功,然后尝试匹配$,失败,所以它回溯并尝试另一个以\1开头的析取。我假设当它击中“a”\1时取值“a”,但现在因为它必须回溯它忘记了这个值?它是如何工作的?而\1在此之后将无法匹配任何内容?

1 个答案:

答案 0 :(得分:4)

正则表达式中的反向引用始终仅匹配与当前匹配的内容。这是一个一致性问题 - 不匹配的字符串部分不应该污染匹配引擎的状态,因为这会导致误报。

所以是的,你是对的:\1反向引用永远不会匹配任何东西(甚至不是空字符串),因为它对应的捕获组也将永远不会匹配,因为它位于另一侧交替运营商。