Regex.IsMatch("ab", @"^(?:(a)|\1b)$") == False
所以它尝试匹配a
,成功,然后尝试匹配$
,失败,所以它回溯并尝试另一个以\1
开头的析取。我假设当它击中“a”\1
时取值“a”,但现在因为它必须回溯它忘记了这个值?它是如何工作的?而\1
在此之后将无法匹配任何内容?
答案 0 :(得分:4)
正则表达式中的反向引用始终仅匹配与当前匹配的内容。这是一个一致性问题 - 不匹配的字符串部分不应该污染匹配引擎的状态,因为这会导致误报。
所以是的,你是对的:\1
反向引用永远不会匹配任何东西(甚至不是空字符串),因为它对应的捕获组也将永远不会匹配,因为它位于另一侧交替运营商。