gpt4 book ai didi

java - 可选的捕获组

转载 作者:行者123 更新时间:2023-11-30 02:37:01 25 4
gpt4 key购买 nike

我需要解析一些 HTTP 请求,现在想要解析 GET 参数。

我当前的正则表达式是

(GET|POST)\s(.*)(\?.*)\sHTTP\/(\d\.\d)

我想匹配以下内容:

"GET /page.html HTTP/1.1"
=> group1: "GET" group2: "/page.html" group3: "" group4: "1.1"

"GET /page.html?param1=foo&param2=bar HTTP/1.1"
=> group1: "GET" group2: "/page.html" group3: "param1=foo&param2=bar" group4: "1.1"

我当前的正则表达式仅匹配第二个

最佳答案

用可选的非捕获组包装第三个捕获组,并在第二个捕获组中使用惰性 *? 量词,以将尽可能少的字符匹配到组 2 中(对于匹配组 3 的字符)查询参数以获取这些数据(如果存在):

(GET|POST)\s(.*?)(?:(\?.*)\s)?HTTP\/(\d\.\d)
^ ^^^^^^^^^^^^^

详细信息:

  • (GET|POST) - 第 1 组:GETPOST 子字符串
  • \s - 空格
  • (.*?) - 第 2 组:任何 0+ 个字符,尽可能少(以便将查询字符串中的所有参数生成到下一个捕获组,如果查询字符串是存在)
  • (?:(\?.*)\s)? - 可选(1 次或 0 次)非捕获组匹配:
    • (\?.*) - 第 3 组捕获 ?,任何尽可能多的 0+ 个字符,直到最后一个...
    • \s - 空间
  • HTTP\/ - HTTP/ 文字字符序列
  • (\d\.\d) - 第 4 组捕获一个数字、. 和一个数字。

请参阅regex demo .

enter image description here

现在,如果字符串中没有 ?,第 3 组将不会捕获任何内容,因为必需的 ?\s 是可选作为序列的一部分

关于java - 可选的捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42771143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com