关闭括号之前的转义字符是多余的

Hub*_*uba 2 java regex intellij-idea

我需要匹配字符串中大括号之间的一些数字,我的正则表达式如下所示:SNC{(\\\d*)}
应用转义字符后,我认为正则表达式应该转换为SNC\\\\{(\\\d*)\\\\},但 Intellij 的检查员建议在右括号之前转义反斜杠是多余的,所以SNC\\\\{(\\\d*)}就足够了。为什么它有效?

Psh*_*emo 5

在正则表达式中{m,n}用作量词,表示mn(含)之间的数量。{如果您像这样先转义,\{..}则正则表达式引擎不会将该子表达式的其余部分视为量词的描述,因此它不再特殊,它允许我们跳过 的转义}

尽管转义}是允许的 - 这意味着您的代码可以工作 - 正如您看到的一些 IDE 认为这是不必要的并警告您。


顺便说一句,相同的规则适用于\[...]但不适用于\(...)-如果您想将其视为文字,则正则表达式)始终期望显式转义。

(推测:)
我猜测这个决定是基于这样的事实:((...)包括环视、命名组等)可以在正则表达式中经常使用并且可以嵌套。因此,我们经常会遇到正则表达式,例如( \( ( ...) ( ) ) )注意到哪个)代表文字可能是一个问题。