【发布时间】:2016-06-10 07:50:30
【问题描述】:
尝试简单的正则表达式我发现了一些奇怪的行为。
单对括号 [] 被视为不完整的字符类(PCRE 和 Python)并引发错误,或者被视为空字符类 (JS),这不是错误,但不匹配任何内容.
接下来,JS 按预期将[][] 视为两个空类,但在PCRE 和Python 最里面的括号][ 被解释为文字,即使它们没有被转义。
进一步的实验表明,三个表达式在实践中是等价的:
[][]
[\]\[]
[\[\]]
第二个和第三个对我来说很有意义,但为什么第一个有效?有人可以向我解释一下 [][] 构造是如何解析的吗?
【问题讨论】:
-
它会根据您使用的语言而有所不同。对于 Python,documentation 表示“要匹配集合内的文字 ']',请在其前面加上反斜杠,或将其放在集合的开头”。
-
在哪个引擎中是如何解析的? AFAIK 不同语言使用的正则表达式并非基于真正的标准,它们主要是 Perl 的临时衍生品。如果没有标准,这个问题只能在特定语言/引擎的上下文中回答。如果您缩小范围,有人可能会深入研究语言的实现或规范,并找到负责此行为的规则。这个问题有点宽泛。
标签: javascript python regex pcre