0

我正在尝试匹配 HTTP 请求行并获取请求的项目。我有以下正则表达式:

Pattern regex = Pattern.compile("GET /(\\w+\\.\\w+)? HTTP/1.1");

如果你检查它,你会注意到一个可选的 group (\\w+\\.\\w+)?。当我发送文件时,例如GET /index.html HTTP/1.1它可以正常工作并matcher.groupCount()返回1. 问题是当我发送类似GET / HTTP/1.1. 我不知道如何检查组是否匹配,因为也matcher.groupCount()返回1了。我怀疑该groupCount()函数返回正则表达式中的组数,而不管它们是否存在于已解析的字符串中。

谢谢

4

1 回答 1

1

您实际上不需要在这里使用可选组。这个正则表达式会更好地为您工作:

Pattern regex = Pattern.compile("GET (/\\S+) HTTP/1\.1");

即匹配并捕获从一开始的所有内容,/直到您点击空格作为REQUEST URI.

请记住,Web 请求也可以包含查询参数?&等等,\\w+\\.\\w+这不是一个很好的正则表达式来匹配它们。

于 2013-11-08T11:41:24.967 回答