Java Regex:让它找到最长匹配?

时间:2015-07-05 16:19:01

标签: java regex

我正在使用这样的正则表达式(仅用于说明目的):

(?<number>[0-9]+)|(?<date>[0-9]+\-[0-9]+\-[0-9]+)

应用于2009-11-10 Matcher::lookingAt收益2009。我可以在API或正则表达式中传递一个标志来告诉引擎考虑最长的匹配匹配吗?

我知道在这种特殊情况下我可以简单地重新排序这两个语句,但是我正在以编程方式组装来自几个正则表达式的正则表达式,我希望他们的命令不会发挥匹配和什么不匹配。

我使用的是Java 8。

1 个答案:

答案 0 :(得分:0)

唯一(一般)方式是重新排序组。在这种情况下,您知道最长匹配将是第二组,因此需要先放入。这是因为从左到右解析正则表达式以找到匹配。

或者,对于这种情况,您可以使用标记行的开头和结尾的边界匹配来包装正则表达式:

^(([0-9]+)|([0-9]+\-[0-9]+\-[0-9]+))$

如果输入与整行匹配,则只会找到最长匹配。