gpt4 book ai didi

Java 正则表达式 : make it find longest match?

转载 作者:太空宇宙 更新时间:2023-11-04 13:41:21 24 4
gpt4 key购买 nike

我有一个像这样的正则表达式(仅用于说明目的):

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

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

我确实知道,在这种特殊情况下,我可以简单地重新排序这两个语句,但我正在以编程方式从多个正则表达式组装正则表达式,并且我希望它们的顺序不会影响匹配和不匹配的内容。

我使用的是 Java 8。

最佳答案

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

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

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

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

关于Java 正则表达式 : make it find longest match?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31232414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com