gpt4 book ai didi

发生多个匹配时的java正则表达式首选项

转载 作者:行者123 更新时间:2023-12-01 14:05:40 25 4
gpt4 key购买 nike

嗨,我想特别了解 OR 运算符“|”的作用在 Java 正则表达式中工作。我刚刚开始使用它,大多数事情对我来说还不清楚。

假设我希望匹配分数和整数,即 1/2、12/25 形式的事物以及 13、235 等形式的事物。

我试过这两种模式:

pattern1 = Pattern.compile("\\d+|\\d+/\\d+"))
pattern2 = Pattern.compile("\\d+/\\d+|\\d+"))

在英语中,模式 1 表示“数字或数字/数字”,而模式 2 表示“数字/数字或数字”。

现在考虑这个输入字符串:
inputStr = "blah... 231/232 blah... 4 blah... 2"

对于pattern1,我找到了这些匹配项:
[junit] found 231
[junit] found 232
[junit] found 4
[junit] found 2

对于模式 2,我找到了这些匹配项:
[junit] found 231/232
[junit] found 4
[junit] found 2

现在 pattern1 和 pattern2 之间的唯一区别是其匹配元素的顺序。当然,pattern2 是我想要的,因为它似乎“更喜欢”一个真正的派系而不是将它们分开。

所以对我来说最重要的问题是:
这种行为是否可靠/可预测,还是不同平台会有所不同?

但也只是好奇……这个问题也是:
我还发现它令人困惑,因为运算符“OR”在其参数方面应该是对称的,例如加法。当 1+2 和 2+1 携带不同的语义时,您会想象人们会担心……这里的模式 1 和模式 2 是否有任何理由在语义上不同?

最佳答案

|不只是 OR ,它的意思是“匹配第一件事,如果失败,匹配第二件事”。

因此,您希望将分数放在首位,因为它是首选形式。

关于发生多个匹配时的java正则表达式首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12822415/

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