关闭brascet之前逃脱角色是多余的

时间:2017-09-30 20:14:18

标签: java regex intellij-idea

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

1 个答案:

答案 0 :(得分:2)

在正则表达式中,{m,n}用作表示mn(包括)之间的数量的量词。如果您像{那样首先转发\{..},那么正则表达式引擎不会将该子表达式的其余部分视为量词的描述,因此它不再是 special ,它允许我们跳过转义为}(虽然它是允许的,意味着你的代码可以工作,但正如你所看到的那些IDE认为它是不必要的并且警告你)。

BTW同样的规则适用于\[...]但不适用于\(...) - 如果您想将)视为文字,则正则表达式总是希望(...)显式转义,因为)是经常使用,在( \( ( ...) ( ) ) )这样的正则表达式中使用未转义的{{1}}可能会非常混乱。