我正在尝试匹配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.groupCount()
也返回1
。我怀疑groupCount()
函数返回正则表达式中的组数,而不管它们是否存在于已解析的字符串中。
由于
答案 0 :(得分:1)
您实际上不需要在此处使用可选组。这个正则表达式将更适合你:
Pattern regex = Pattern.compile("GET (/\\S+) HTTP/1\.1");
即。匹配&从第一个/
捕获所有内容,直到您以REQUEST URI
命中空格。
请记住,网络请求也可以包含?
,&
等的查询参数,\\w+\\.\\w+
并不是一个很好的正则表达式来匹配它们。