嗨,我想特别了解 OR 运算符“|” 在 java 正则表达式中工作。我刚开始使用它,大多数事情对我来说都不清楚。
假设我希望匹配分数和整数,即 1/2、12/25 形式的事物,以及 13、235 等形式的事物。
我试过这两种模式:
pattern1 = Pattern.compile("\\d+|\\d+/\\d+"))
pattern2 = Pattern.compile("\\d+/\\d+|\\d+"))
在英语中,pattern1 表示“digits OR digits/digits”,而 pattern2 表示“digits/digits OR digits”。
现在考虑这个输入字符串:
inputStr = "blah... 231/232 blah... 4 blah... 2"
对于 pattern1,我找到了这些匹配项:
[junit] found 231
[junit] found 232
[junit] found 4
[junit] found 2
对于 pattern2,我找到了这些匹配项:
[junit] found 231/232
[junit] found 4
[junit] found 2
现在,pattern1 和 pattern2 之间的唯一区别是其匹配元素的顺序。当然,pattern2 是我想要的,因为它似乎“更喜欢”一个真正的派系而不是将它们分开。
所以对我来说最重要的问题是:这种行为是否可靠/可预测,还是会因不同平台而有所不同?
但也只是好奇......这个问题也是:我也觉得它令人困惑,因为运算符“OR”应该关于它的论点是对称的,比如加法。当 1+2 和 2+1 带有不同的语义时,你会想象人们会担心……这里的 pattern1 和 pattern2 有什么不同的语义吗?