我面临的情况是我可以获得两种HTTP请求: 使用参数,或不使用。
1. GET /index.html?x=1&y=2 HTTP/1.1
2. GET /index.html HTTP/1.1
我想将这两行划分为正则表达式组。 我有这个正则表达式字符串:
^(.+?)\s(\/.*)|((\/.*\?)(.+=.+)+)\sHTTP\/\d\.\d$
您可以更轻松地在此处看到此内容: https://regex101.com/r/rH4rL1/5
如您所见,我试图为每组参数设置一个组(x = 1是一组,y = 2是另一组)。
然而,正如你在regex101中所看到的那样,在' GET'之后的整行。被捕获到一个组。
我在这里做错了什么?
答案 0 :(得分:1)
首先,我应该说Java或其他任何成熟的语言
有一个设施可以做到这一点,而不必自己滚动。
谷歌搜索java parse http get request
出现了一些潜在客户。对于
在这篇文章的其余部分中,我假设您想要自己推出
无论什么原因。
好的,所以看起来你想要在群组中捕捉几件事。
首先是路径名,最后是协议,以及其间的任何查询字符串。它
看起来现有的正则表达式也会捕获GET
,但那就是
不断,所以我不打扰。您可以根据需要添加它。
GET /index.html?x=1&y=2 HTTP/1.1
GET /index.html HTTP/1.1
英文:
?
或空格?
,然后捕获任何查询字符串,直到我们点击空白我不懂Java。这个正则表达式适用于Python3。你应该能够 翻译没有太多麻烦。
GET\s+([^?\s]+)((?:[?&][^&\s]+)*)\s+(HTTP/.*)
注意第二部分((?:[?&][^&\s]+)*)
。外括号是
捕获并捕获整个查询字符串集,这必须是
后来被分成了&符号。内括号使用?:
,a
导致它们无法捕获的扩展名。我不知道Java是否有
相似的东西。如果没有查询字符串,则中间项为
空字符串。