【问题标题】:In regex (regular expressions), is escaping a closing square brace (]) needed when the opening square brace ([) is escaped? [duplicate]在正则表达式(正则表达式)中,当左方括号([)被转义时,是否需要转义右方括号(])? [复制]
【发布时间】:2021-10-02 12:20:25
【问题描述】:

在他们的excellent answerthis 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++


【解决方案1】:

一般来说,我希望答案是“否”,不是必需的。但是为什么要危险地生活呢?最好与正确性/安全性功能完全一致。

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

所以

这样做可以吗,因为正则表达式引擎会知道它当前不在括号中的字符类中?

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

或者除了左方括号之外,是否最好转义右方括号?

响亮的是!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多