gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:34:59 24 4
gpt4 key购买 nike

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

最佳答案

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

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


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

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

关于java - 关闭括号之前的转义字符是多余的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46506657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com