intellij-idea 关闭括号前的转义符是多余的

rpppsulh  于 2022-11-01  发布在  其他
关注(0)|答案(1)|浏览(261)

我需要匹配字符串中花括号之间的一些数字,我的正则表达式看起来像这样:SNC{(\\\d*)} .
在应用转义字符后,我认为regex应该转换为SNC\\\\{(\\\d*)\\\\},但Intellij的检查器建议在右括号前转义反斜杠是多余的,所以SNC\\\\{(\\\d*)}就足够了。为什么它能工作呢?

dpiehjr4

dpiehjr41#

在正则表达式中,{m,n}被用作量词,表示mn之间的数量。如果您像\{..}一样转义第一个{,则正则表达式引擎不会将该子表达式的其余部分视为量词的描述,因此它不再是允许我们跳过}转义的 special
虽然允许转义这样的}-这意味着您的代码将工作-正如您所看到的,一些IDE认为它是不必要的,并 * 警告 * 您有关它。
顺便说一句,同样的规则适用于\[...],但不适用于\(...)-如果您想将)视为文字 *,regex总是希望)显式转义 *。
(猜测:)
我猜这个决定是基于(...)(包括look-around,named-groups,等等)在正则表达式中可以被频繁使用并且可以被嵌套的事实。所以我们经常使用像( \( ( ...) ( ) ) )这样的正则表达式,注意哪个)代表 literal 可能是个问题。

相关问题