2010-12-07 67 views
1
Regex.IsMatch("ab", @"^(?:(a)|\1b)$") == False 

所以它试图匹配a,成功,然后再尝试匹配$,失败,所以它回溯并尝试其他的间断,这与\1开始。我假设它碰到“a”\1取值“a”,但现在因为它必须回溯它忘记了那个值?它是如何工作的?在这之后,\1只会无法匹配任何内容?为什么这个正则表达式无法匹配?

+0

告诉我们你想匹配什么可能会更好? – 2010-12-07 20:21:32

回答

4

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

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

相关问题