You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则表达式将指定HTTP请求字符串分割为请求组?

嘿,我来帮你搞定这个正则提取请求单元的问题!首先得说你之前的正则为啥没成功——一是你加了\n换行符,但你的输入其实是单行字符串,这直接导致匹配不上;二是没处理JSON里的嵌套大括号,贪婪匹配会提前在第一个闭合括号就终止,拿不到完整的请求。

下面给你分情况提供可行的正则方案:

1. 支持嵌套大括号的通用方案(PCRE兼容)

如果你的工具/语言支持PCRE语法(比如VS Code、PHP、Perl,或者Python用第三方regex库),这个正则可以完美处理嵌套的JSON结构:

(GET|PUT|POST|DELETE)\s+\/\S+\s+\{(?:[^{}]|(?R))*\}

正则拆解:

  • (GET|PUT|POST|DELETE):精准匹配HTTP请求方法
  • \s+\/\S+:匹配请求路径(空格开头,后面跟非空白的路径字符)
  • \s+\{:匹配请求体前的空格和左大括号
  • (?:[^{}]|(?R))*:核心部分——匹配任意非大括号字符,或者递归匹配整个括号内的内容,完美处理嵌套的大括号
  • \}:匹配闭合的右大括号

用这个正则匹配你的输入字符串,会精准提取出三个完整的请求单元:

  1. GET /bar { "limit": { "foo": 1 } }
  2. GET /barfoo { "limit": { "foo": 1 } }
  3. GET /fuzz { "limit": 1 }

2. Python标准库适配方案

Python自带的re模块不支持递归匹配,这时候可以安装第三方的regex库(pip install regex),然后用下面的代码提取:

import regex

input_text = 'GET /bar { "limit": { "foo": 1 } } GET /barfoo { "limit": { "foo": 1 } } GET /fuzz { "limit": 1 }'
pattern = r'(GET|PUT|POST|DELETE)\s+\/\S+\s+\{(?:[^{}]|(?R))*\}'
# 获取所有完整匹配
full_matches = [match.group(0) for match in regex.finditer(pattern, input_text)]
print(full_matches)

运行后就能得到三个完整的请求单元列表。

3. 无嵌套场景的简化方案

如果你的请求体里永远不会有嵌套大括号,也可以用这个更简单的正则(但不推荐用于有嵌套的情况):

(GET|PUT|POST|DELETE)\s+\/\S+\s+\{[^{}]*\}

内容的提问来源于stack exchange,提问作者jesusgn90

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:15:09