嗨,我想特别了解OR运算符"|" 在java正则表达式中工作.我刚开始使用它,大部分事情都不清楚.
假设我希望匹配分数和整数,也就是说1/2,12/25形式的东西,以及形式13,235等的东西.
我试过这两种模式:
pattern1 = Pattern.compile("\\d+|\\d+/\\d+"))
pattern2 = Pattern.compile("\\d+/\\d+|\\d+"))
Run Code Online (Sandbox Code Playgroud)
在英语中,pattern1表示"数字或数字/数字",而pattern2表示"数字/数字或数字".
现在考虑这个输入字符串:
inputStr = "blah... 231/232 blah... 4 blah... 2"
Run Code Online (Sandbox Code Playgroud)
对于pattern1,我发现了这些匹配:
[junit] found 231
[junit] found 232
[junit] found 4
[junit] found 2
Run Code Online (Sandbox Code Playgroud)
对于pattern2,我发现了这些匹配:
[junit] found 231/232
[junit] found 4
[junit] found 2
Run Code Online (Sandbox Code Playgroud)
现在,pattern1和pattern2之间的唯一区别是其匹配元素的顺序.当然,pattern2是我想要的,因为它似乎"更喜欢"一个真正的派系而不是把它们分开.
所以对我来说最重要的问题是:这种行为是可靠的/可预测的,还是对于不同的平台会有所不同?
但也只是好奇......这个问题也是如此:我也觉得它令人困惑,因为运算符"OR"应该与其参数对称,如加法.当1 + 2和2 + 1带有不同的语义时,你会想到人们会担心...这里有什么理由让pattern1和pattern2在语义上有所不同?
| 归档时间: |
|
| 查看次数: |
945 次 |
| 最近记录: |