嗨,我想特别了解 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/