2015-07-05 45 views
1

我有这样的正则表达式(仅用于illustratory目的):Java正则表达式:使它找到最长匹配?

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

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

我知道在这种特殊情况下,我可以简单地重新排列这两个语句,但是我用程序从几个正则表达式中组装正则表达式,我很想让他们的顺序不能发挥什么匹配,什么不匹配。

我正在使用Java 8.

回答

0

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

另外,对于这种情况,你可以边包住正则表达式匹配标志着该行的开头和结尾:

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

这只会找到最长的匹配,如果输入的整条生产线相匹配。