gpt4 book ai didi

正则表达式替换范围

转载 作者:行者123 更新时间:2023-12-05 05:19:59 27 4
gpt4 key购买 nike

交替运算符 | 的作用域是什么?在某些情况下,似乎 | 左侧的所有内容都是一种选择,而 | 右侧的所有内容都是第二种选择。为什么备选方案不限于 | 前后的捕获组或标记?

我正在测试 RegExr ,但我将在 Java 中运行正则表达式。

我有两个简短的正则表达式:

(\d{3})\W+(SSN)

(匹配项以粗体显示。)

SSNx 123 SSN

(SSN)\W+(\d{3})

(匹配项以粗体显示。)

社会安全号码 123社会安全号码

如果我像这样组合正则表达式:

(\d{3})\W+(SSN)|(SSN)\W+(\d{3})

正则表达式匹配(粗体)

社会安全号码 123社会安全号码

SSNx 123 SSN

为什么我没有必要添加这样的括号?

((\d{3})\W+(SSN))|((SSN)\W+(\d{3}))

我希望交替操作仅在周围的捕获组之间交替,例如“SSN”或“SSN”。如果是这样,那么结果将如下所示:

((\d{3})\W+(SSN)\W+(\d{3}))

没有匹配。

最佳答案

这不是范围问题,而是优先级问题,alternation has the lowest precedence of all operators.

The alternation operator has the lowest precedence of all regex operators. That is, it tells the regex engine to match either everything to the left of the vertical bar, or everything to the right of the vertical bar. If you want to limit the reach of the alternation, you need to use parentheses for grouping.

您说您“期望交替操作仅在周围的捕获组之间交替。”但是,因为交替具有最低的优先级,所以它匹配左边的所有内容或右边的所有内容.

关于正则表达式替换范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45339422/

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