我需要匹配字符串中花括号之间的一些数字,我的正则表达式看起来像这样:SNC{(\\\d*)} .在应用转义字符后,我认为regex应该转换为SNC\\\\{(\\\d*)\\\\},但Intellij的检查器建议在右括号前转义反斜杠是多余的,所以SNC\\\\{(\\\d*)}就足够了。为什么它能工作呢?
SNC{(\\\d*)}
SNC\\\\{(\\\d*)\\\\}
SNC\\\\{(\\\d*)}
dpiehjr41#
在正则表达式中,{m,n}被用作量词,表示m和n之间的数量。如果您像\{..}一样转义第一个{,则正则表达式引擎不会将该子表达式的其余部分视为量词的描述,因此它不再是允许我们跳过}转义的 special。虽然允许转义这样的}-这意味着您的代码将工作-正如您所看到的,一些IDE认为它是不必要的,并 * 警告 * 您有关它。顺便说一句,同样的规则适用于\[...],但不适用于\(...)-如果您想将)视为文字 *,regex总是希望)显式转义 *。(猜测:)我猜这个决定是基于(...)(包括look-around,named-groups,等等)在正则表达式中可以被频繁使用并且可以被嵌套的事实。所以我们经常使用像( \( ( ...) ( ) ) )这样的正则表达式,注意哪个)代表 literal 可能是个问题。
{m,n}
m
n
\{..}
{
}
\[...]
\(...)
)
(...)
( \( ( ...) ( ) ) )
1条答案
按热度按时间dpiehjr41#
在正则表达式中,
{m,n}
被用作量词,表示m
和n
之间的数量。如果您像\{..}
一样转义第一个{
,则正则表达式引擎不会将该子表达式的其余部分视为量词的描述,因此它不再是允许我们跳过}
转义的 special。虽然允许转义这样的
}
-这意味着您的代码将工作-正如您所看到的,一些IDE认为它是不必要的,并 * 警告 * 您有关它。顺便说一句,同样的规则适用于
\[...]
,但不适用于\(...)
-如果您想将)
视为文字 *,regex总是希望)
显式转义 *。(猜测:)
我猜这个决定是基于
(...)
(包括look-around,named-groups,等等)在正则表达式中可以被频繁使用并且可以被嵌套的事实。所以我们经常使用像( \( ( ...) ( ) ) )
这样的正则表达式,注意哪个)
代表 literal 可能是个问题。