Sublime清洗抓包文本需先统一换行格式(如切为Unix LF)、启用正则模式,再用^GET\r?等显式兼容\r\n的锚定方式匹配;替换用$1而非\1,编码须设为UTF-8,空白符需手动处理全角字符。

Sublime 本身不解析 HTTP 流量,所谓“清洗抓包数据”,本质是把导出的原始文本(如 Wireshark 的 Export Packet Dissections → As Plain Text、Fiddler 的 All Sessions → Export → Text、或 curl -v 输出)用正则做结构化提取与格式归一——关键不是功能多强,而是正则能不能稳住边界、不跨行、不吞内容。
为什么直接搜 GET 或 HTTP/1.1 常常漏掉或错位?
抓包文本里协议头和 body 混在一起,换行符类型混乱(\r\n vs \n),且 ^ 和 $ 默认不锚定每行首尾。例如在 Windows 下粘贴的 Wireshark 导出文本,^GET 根本不匹配任何行——因为 ^ 只匹配整个文本开头,不是每行开头。
- 必须先点查找面板右下角的
.*图标启用正则,否则^就是字面量符号 - 显式兼容
\r\n:把^GET改成^GET\r?,把HTTP/1.1$改成HTTP/1.1\r?$ - 更稳妥:右下角点击换行标识(如显示
Windows (CRLF)),切换为Unix (LF),再开.*模式 - 别依赖
\b锚定单词边界——抓包文本里常有GET/、POSTdata这类连写,\b在 Sublime 中对中文/混合标点也不稳定
怎么安全提取请求 URL 而不被 HTML 注释或 JS 字符串污染?
直接搜 https?://[^"\s>)]+ 看似简单,但在 Fiddler 导出的完整 session 文本中,它会误吞 <script>location.href="https://x.com"</script> 里的链接,甚至匹配到 base64 编码片段中的伪 URL。
- 先删干扰块:用
<script>]*>[\s\S]*?</script>(勾选. matches newline)删 JS 块;用<!--[\s\S]*?-->删注释 - 再精准定位请求行:搜
^(GET|POST|PUT|DELETE)\s+([^\s]+)\s+HTTP/,两个捕获组分别对应方法和路径 - 若需补全 host:查
^Host:\s*([^\r\n]+),再手动拼接;或一次搜^(GET|POST)\s+([^\s]+)\s+HTTP.*?\nHost:\s*([^\r\n]+)(启用. matches newline,但注意性能下降) - 避免贪婪跨段:把
.*全换成[^\r\n]*,比如^Content-Type:\s*([^\r\n]+),防止匹配到下一个请求头
Ctrl+H 替换时,为什么 \1 不生效、反而输出字面量?
这是 Sublime 正则引擎最易踩的语法坑:查找框里用 \1 引用捕获组,但替换框里必须用 $1,且不能加反斜杠转义。
- 错误写法:
Replace: func(\2, \1)→ 输出字面量\2和\1 - 正确写法:
Replace: func($2, $1)→ 成功交换顺序 - 想输出字面量
$?写成$$,比如$$1输出$1 - 命名捕获组仅支持
(?P<name>...)</name>,替换时用${name}(不是$name或g<name></name>) - 如果替换后内容含换行,直接在替换框里按
Enter,不要写\n—— Sublime 会原样插入真实换行符
清洗后字段粘连、中文变方块、空行失控的根本原因
这些问题几乎从不来自正则逻辑本身,而是编码与空白字符处理失当。
- 乱码/方块:右下角看当前
Encoding是否为UTF-8;若显示Western (CP1252)或GBK,说明文件被错误解码,需用File → Reopen with Encoding → UTF-8重载 - 全角空格不被
\s匹配:它只认 ASCII 空白(半角空格、\t、\n等),对中文全角空格(\u3000)、不间断空格(\u00A0)完全无效 - 解决办法:查找框里直接粘贴一个全角空格,或输入
\u3000,替换为半角空格;批量清理混合空白可用[ \t\n\r\f\v\u3000\u00A0\u2000-\u200B\u2028\u2029]+ - 空行失控:删完 header 后只剩裸 body,
<p>标题</p> <div>内容</div>变成“标题内容”——这不是正则错,是没做语义保留;补救用<p></p>→\n、→\n、<br>
→\n单独处理
真正难的不是写出第一个能跑的正则,而是判断哪一段该用 [^\r\n]*、哪一段必须开 . matches newline、哪一段得先切编码再操作——这些决策点藏在换行符类型、引号嵌套层级、以及你手头那堆原始文本到底从哪个工具导出的细节里。

















