Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.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正则表达式:Matcher.find问题_Java_Regex - Fatal编程技术网

Java正则表达式:Matcher.find问题

Java正则表达式:Matcher.find问题,java,regex,Java,Regex,在匹配.find()时,我很难区分两个模板 当给定以下输入:“GET/boards/boardName/lists”时,它与第一个模板而不是第二个模板匹配。我做错了什么 提前感谢这是因为(.+?)将匹配长度为1或更多的字符组合,这将使您的正则表达式引擎匹配以下部分: boardName/lists 还请注意,如果您首先尝试以下正则表达式: GET /boards/(.+?)/lists 它也将匹配字符串,但区别在于,在这个正则表达式中,组1将包含boardName,但在第一个正则表达式中,组

在匹配.find()时,我很难区分两个模板

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


提前感谢

这是因为
(.+?)
将匹配长度为1或更多的字符组合,这将使您的正则表达式引擎匹配以下部分:

boardName/lists
还请注意,如果您首先尝试以下正则表达式:

GET /boards/(.+?)/lists
它也将匹配字符串,但区别在于,在这个正则表达式中,组1将包含
boardName
,但在第一个正则表达式中,组1将包含
b
(因为
使
+
成为一个非贪婪模式)

如果希望第一个正则表达式与字符串不匹配,可以使用a和a来匹配后面没有单词
列表的字符串:

GET /boards/([^/]+)(?!lists)

在第一个字符中,
+?
仍将匹配(非贪婪地)最后一个正斜杠后的字符,因为
匹配除换行符以外的任何单个字符。因此,它首先匹配这个表达式。如果不希望第一个表达式匹配,请将其更改为
GET/boards/([^/]+)$
是否确实输入不会同时匹配这两个表达式?在第一种情况下,组1包含
boardName/list
。在第二种情况下,组1包含
boardName
。两种模式都将匹配。@hwnd-Yep,这将匹配在
GET/boards/
之后只有一个单词的字符串。您能检查一下吗:我得到的输出与您提到的不同。@YoungHobbit-Yep,很抱歉我错过了这一点,第一个正则表达式组1将是字符
b
,因为没有匹配
GET /boards/([^/]+)(?!lists)