为什么结束括号是一个必须转义为字面值的特殊字符?

The*_*One 2 regex

很明显,开头括号"(",以及其他字符之间必须转义(以反斜杠为前缀),以便正则表达式包含"文字开口括号":因为有正则表达式选项,"("是一个引导 - 在.

但是,对于结束括号")",怎么会这样呢?没有语法结构具有")"作为引入令牌,是吗?

那么为什么我必须逃避关闭括号才能按字面意思理解?

当然,也可以在其他结束括号中提出同样的问题.

很抱歉这是"为什么会这样?" 题.它可能是无法回答的.但如果是一个很好的理由,唯一的办法去了解它是问!

附录:这个问题背后的基本原理是:例如,http://www.regexguru.com/2008/12/dont-escape-literal-characters-that-arent-metacharacters/给出充分的理由不前缀字符don'需要加前缀.

而且imho,在大多数情况下,结束括号不需要加前缀:由于没有开口的结束括号不是正则表达式组的一部分,我发现在这种情况下它需要被转义完全不合逻辑.

tob*_*s_k 6

假设您要匹配持有结束括号的组.没有逃脱,这将是这样的()).转义括号就像(\))使正则表达式正确且明确地解析更容易(如果不可能).

在(未转义)正则表达式中(\w)),右括号是否属于该组,即,是由第一个还是第二个关闭的组)?例如,对于字符串abc)d,它匹配c还是c)?

当然,如果含义不明确(并且正则表达式解析器允许这样做),可以省略一些转义字符,但它会有什么帮助?你可以在这里和那里保存一个角色,但是每当你遇到一个)或另一个特殊角色时你都要思考:"这是一个控制角色还是一个要匹配的角色?这是不明确的?" 更好地使其清晰和一致.