Java 检查正则表达式是否与可选组匹配
我正在尝试匹配HTTP请求行并获取请求的项。我有以下正则表达式:Java 检查正则表达式是否与可选组匹配,java,regex,Java,Regex,我正在尝试匹配HTTP请求行并获取请求的项。我有以下正则表达式: Pattern regex = Pattern.compile("GET /(\\w+\\.\\w+)? HTTP/1.1"); 如果选中它,您将注意到一个可选组(\\w+\\.\\w+)。当我发送一个文件时,例如GET/index.html HTTP/1.1它工作正常,matcher.groupCount()返回1。问题是当我发送类似于GET/HTTP/1.1的东西时。我不知道如何检查组是否匹配,因为matcher.group
Pattern regex = Pattern.compile("GET /(\\w+\\.\\w+)? HTTP/1.1");
如果选中它,您将注意到一个可选组(\\w+\\.\\w+)
。当我发送一个文件时,例如GET/index.html HTTP/1.1
它工作正常,matcher.groupCount()
返回1
。问题是当我发送类似于GET/HTTP/1.1
的东西时。我不知道如何检查组是否匹配,因为matcher.groupCount()
也返回1
。我怀疑groupCount()
函数返回正则表达式中的组数,而不管它们在解析的字符串中是否存在
谢谢您实际上不需要在这里使用可选组。此正则表达式将更适合您:
Pattern regex = Pattern.compile("GET (/\\S+) HTTP/1\.1");
i、 e.匹配并捕获所有内容,从第一个/
,直到您找到一个空格作为请求URI
请记住,web请求也可以包含查询参数,
?
,&
等,\\w+\\.\\w+
不是一个很好的正则表达式来匹配它们。我知道我可以使用类似(.*)的东西,但我想知道这是否可行。我知道还有其他选项,但我想知道是否有可能计算出有多少组匹配。这只是一个例子:)