检查正则表达式是否与可选组匹配

时间:2013-11-08 11:36:20

标签: 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.groupCount()也返回1。我怀疑groupCount()函数返回正则表达式中的组数,而不管它们是否存在于已解析的字符串中。

由于

1 个答案:

答案 0 :(得分:1)

您实际上不需要在此处使用可选组。这个正则表达式将更适合你:

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

即。匹配&从第一个/捕获所有内容,直到您以REQUEST URI命中空格。

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