在正则表达式(正则表达式)中,是否在转义左方括号 ([) 时转义右方括号 (])?

In regex (regular expressions), is escaping a closing square brace (]) needed when the opening square brace ([) is escaped?

在他们的 to 中,正则表达式大师 Wiktor Stribiżew 提供了这个正则表达式:

(?:\G(?!^)|^\[bar])(?:\s*\R\w+=|[^\w\r\n]+)\K\w+

在此表达式中,他们使用:
^\[bar]

匹配行首的[bar]

如您所见,开始的方括号被转义了,但结束的方括号没有转义。

这样做可以吗,因为正则表达式引擎会知道它当前不在括号字符 class 内?还是除了开方括号外,更喜欢转义右方括号?

正如 Wiktor 指出的那样,所使用的正则表达式引擎是 Notepad++ 和其他项目使用的 Boost 正则表达式引擎。

一般来说,我希望答案是“否”,不需要。但为什么要过着危险的生活?最好与 correctness/security 特征完全一致。

记住:如果您需要优化正则表达式存储 space,您应该使用压缩而不是绕过您正在使用的当前实现的边缘。

所以

Is this fine to do, as the regex engine will know that it is not currently within a bracketed character class?

我知道的所有实现,是的。

Or is it preferred to escape the closing square bracket in addition to the opening one?

响亮的是!