Java正则表达式:让它找到最长的匹配?
我有一个这样的正则表达式(仅用于插图):Java正则表达式:让它找到最长的匹配?,java,regex,Java,Regex,我有一个这样的正则表达式(仅用于插图): (?[0-9]+)|(?[0-9]+\-[0-9]+\-[0-9]+) 应用于2009-11-10Matcher::lookingAt生成2009。我可以在API或正则表达式中传递一个标志来告诉引擎考虑最长的匹配匹配吗? 我知道在这个特殊的例子中,我可以简单地对这两条语句重新排序,但是我正在以编程的方式从几个正则表达式中组装正则表达式,我希望它们的顺序不影响匹配项和不匹配项 我使用的是Java 8。唯一(通用)的方法是对组重新排序。在这种情况下,你知道
(?[0-9]+)|(?[0-9]+\-[0-9]+\-[0-9]+)
应用于2009-11-10
Matcher::lookingAt
生成2009
。我可以在API或正则表达式中传递一个标志来告诉引擎考虑最长的匹配匹配吗?
我知道在这个特殊的例子中,我可以简单地对这两条语句重新排序,但是我正在以编程的方式从几个正则表达式中组装正则表达式,我希望它们的顺序不影响匹配项和不匹配项
我使用的是Java 8。唯一(通用)的方法是对组重新排序。在这种情况下,你知道最长的比赛将是第二组,所以它需要放在第一位。这是因为从左到右解析正则表达式以查找匹配项
或者,对于这种情况,可以使用边界匹配标记行的开始和结束来包装正则表达式:
^(([0-9]+)|([0-9]+\-[0-9]+\-[0-9]+))$
只有当输入与整行匹配时,才会找到最长的匹配项。唯一(通用)的方法是对组重新排序。在这种情况下,你知道最长的比赛将是第二组,所以它需要放在第一位。这是因为从左到右解析正则表达式以查找匹配项
或者,对于这种情况,可以使用边界匹配标记行的开始和结束来包装正则表达式:
^(([0-9]+)|([0-9]+\-[0-9]+\-[0-9]+))$
只有当输入匹配整行时,才会找到最长的匹配