在正则表达式(正则表达式)中,是否在转义左方括号 ([) 时转义右方括号 (])?
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?
响亮的是!
在他们的
(?:\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?
响亮的是!