Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式:让它找到最长的匹配?_Java_Regex - Fatal编程技术网

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]+))$
只有当输入匹配整行时,才会找到最长的匹配