发生多个匹配时的java regex首选项

Eva*_* Pu 2 java regex

嗨,我想特别了解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在语义上有所不同?

nne*_*neo 6

|不只是OR,它意味着"匹配第一件事,如果失败,匹配第二件事".

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