我需要匹配字符串中大括号之间的一些数字,我的正则表达式如下所示:SNC{(\\\d*)}
。
应用转义字符后,我认为正则表达式应转换为SNC\\\\{(\\\d*)\\\\}
,但Intellij的检查员建议在关闭括号之前转义反斜杠是多余的,因此SNC\\\\{(\\\d*)}
就足够了。它为什么有效?
答案 0 :(得分:2)
在正则表达式中,{m,n}
用作表示m
和n
(包括)之间的数量的量词。如果您像{
那样首先转发\{..}
,那么正则表达式引擎不会将该子表达式的其余部分视为量词的描述,因此它不再是 special ,它允许我们跳过转义为}
(虽然它是允许的,意味着你的代码可以工作,但正如你所看到的那些IDE认为它是不必要的并且警告你)。
BTW同样的规则适用于\[...]
但不适用于\(...)
- 如果您想将)
视为文字,则正则表达式总是希望(...)
显式转义,因为)
是经常使用,在( \( ( ...) ( ) ) )
这样的正则表达式中使用未转义的{{1}}可能会非常混乱。