`]`和`}`不是Regex中的元字符,而')'是

时间:2017-12-01 08:59:06

标签: regex

Regular Expressions Quick Start中,它声明了

  

十二个字符在正则表达式中有特殊含义:反斜杠\,插入符号^,美元符号$,句点或点。,竖线或竖线符号|,问号?,星号或星号*,加号+,左括号(,右括号),开口方括号[和开口大括号{。这些特殊字符通常称为“元字符”。单独使用时,大多数都是错误的。

在其规范中,()[{是元字符,而'关闭sqare括号'和'关闭大括号'则不是。

显然,'['和'{'无法单独起作用就像开括号(应该是合作伙伴')'。

导致']'和}无法被选中的原因是什么?

1 个答案:

答案 0 :(得分:1)

没有充分的理由说明为什么不匹配的]}应该是文字,而)则不应该。

原因]}经常(但并非总是)被解释为文字,如果它们不成对出现,)不成对,可能是“历史”和“因为括号巢”。 (正如Casimir et Hippolyte指出的那样,两者都是如此,因为括号用于表示与分组,外观等有关的一系列事物。)

academia中,正则表达式简化为|(交替),连接和*Kleene-star),括号是第一个便捷语法。如果您要使递归下降解析器将[识别为进入语法略有不同的状态,并且]表示再次离开该状态,则将该状态之外的]识别为作为一个错误不会是识别[的直接副作用。因此,如果错误没有爆发,那就是一个功能!

括号与此不同:由于正则表达式解析器必须跟踪它们嵌套的级别,因此识别其主要状态中不匹配的)是此类解析器的必需部分,并给出错误而不是产生文字)是这种解析器的作者更倾向于做的事情。

请注意,()通常可以在字符组内部进行非转义和不匹配。