Java Regex:Matcher.find问题

时间:2015-10-17 20:05:29

标签: java regex

当我遇到match.find()时,我无法区分两个模板。

String template1 = "GET /boards/(.+?)";
String template2 = "GET /boards/(.+?)/lists";  

给出以下输入时:" GET / boards / boardName / lists" ,它与第一个模板而不是第二个模板匹配。我做错了什么?

提前致谢

1 个答案:

答案 0 :(得分:1)

由于那个(.+?)将匹配长度为1或更长的每个字符组合,这将使您的正则表达式引擎与以下部分匹配:

boardName/lists

另请注意,如果您首先尝试以下正则表达式:

GET /boards/(.+?)/lists

它也将匹配字符串,但不同之处在于,在此正则表达式中,组1将包含boardName,但在第一个组中,组1将为b(因为{{1}这使得?成为一种无贪婪的模式。)

如果您希望第一个正则表达式与您的字符串不匹配,则可以使用negative look aheadnegated character class来匹配未跟随字.+的字符串:

list