1
Regex.IsMatch("ab", @"^(?:(a)|\1b)$") == False
所以它试图匹配a
,成功,然后再尝试匹配$
,失败,所以它回溯并尝试其他的间断,这与\1
开始。我假设它碰到“a”\1
取值“a”,但现在因为它必须回溯它忘记了那个值?它是如何工作的?在这之后,\1
只会无法匹配任何内容?为什么这个正则表达式无法匹配?
Regex.IsMatch("ab", @"^(?:(a)|\1b)$") == False
所以它试图匹配a
,成功,然后再尝试匹配$
,失败,所以它回溯并尝试其他的间断,这与\1
开始。我假设它碰到“a”\1
取值“a”,但现在因为它必须回溯它忘记了那个值?它是如何工作的?在这之后,\1
只会无法匹配任何内容?为什么这个正则表达式无法匹配?
正则表达式中的反向引用总是只匹配当前被匹配的内容。这是一致性问题 - 不匹配的字符串部分不应该污染匹配引擎的状态,因为这会导致误报。
所以是的,你是正确的:\1
反向引用永远不会匹配任何东西(甚至不是空字符串),因为它对应的捕获组也不会匹配,因为它位于交替运算符的另一侧。
告诉我们你想匹配什么可能会更好? – 2010-12-07 20:21:32