【发布时间】:2021-10-02 12:20:25
【问题描述】:
在他们的excellent answer 到this Stack Overflow question 中,正则表达式大师 Wiktor Stribiżew 提供了这个正则表达式:
(?:\G(?!^)|^\[bar])(?:\s*\R\w+=|[^\w\r\n]+)\K\w+
在这个表达式中,他们使用:^\[bar]
匹配行首的[bar]。
如您所见,左方括号被转义,但右方括号没有。
这样做可以吗,因为正则表达式引擎会知道它当前不在括号中的字符类中?或者除了左方括号之外,是否更喜欢转义右方括号?
正如 Wiktor 所指出的,所使用的正则表达式引擎是 Notepad++ 和其他项目所使用的 Boost 正则表达式引擎。
【问题讨论】:
-
您查看过 Boost 文档吗?一般来说,我怀疑这个问题的答案取决于正则表达式的实现。
-
在Boost(基于PCRE)中,
]不是字符类外的特殊字符(即不需要转义),而是字符内的特殊字符(=需要转义)类(仅当它是字符类中的第一个字符时才需要转义。)在应该匹配文字]char 的任何地方对其进行转义并不是错误。
标签: regex boost find escaping notepad++