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

标签 java regex

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

相关文章:

java - 使用多个 ImageView 作为背景

java - 使用 ByteBuffer 将 long 转换为 "unsigned, 4 byte integer in network byte order"

regex - 通过 git diff 理解 xfuncname

JavaFX BarChart xAxis 标签错误定位

java - HtmlUnit 在 getbyxpath 内运行 getbyxpath

java - Selenium 代码打开 facebook Messenger 并发送消息

javascript - 如何使用匹配函数在jquery中将变量添加到 'classname'?

javascript - 4个或更多相同的连续字母

python - 用于 CSV 拆分的正则表达式,包括多个双引号

c# - 用于查找被 {{ }} 包围的单词的正则表达式