我正在使用这样的正则表达式(仅用于说明目的):
(?<number>[0-9]+)|(?<date>[0-9]+\-[0-9]+\-[0-9]+)
应用于2009-11-10
Matcher::lookingAt
收益2009
。我可以在API或正则表达式中传递一个标志来告诉引擎考虑最长的匹配匹配吗?
我知道在这种特殊情况下我可以简单地重新排序这两个语句,但是我正在以编程方式组装来自几个正则表达式的正则表达式,我希望他们的命令不会发挥匹配和什么不匹配。
我使用的是Java 8。
答案 0 :(得分:0)
唯一(一般)方式是重新排序组。在这种情况下,您知道最长匹配将是第二组,因此需要先放入。这是因为从左到右解析正则表达式以找到匹配。
或者,对于这种情况,您可以使用标记行的开头和结尾的边界匹配来包装正则表达式:
^(([0-9]+)|([0-9]+\-[0-9]+\-[0-9]+))$
如果输入与整行匹配,则只会找到最长匹配。