\[([^\]]*)\]最稳:明确排除方括号,需启用正则模式(点.*图标)、加捕获组供$1引用,跨行时用\[([\s\S]*?)\]并勾选“. matches newline”,跨文件提取需二次处理,且须警惕混排语法误匹配。

为什么[.*?]常提取失败
直接写[.*?]看似能匹配方括号内容,但实际会跨行中断(Sublime 默认.不匹配换行符),或吞掉嵌套结构(如[a[b]c]只捕获[a[b])。更常见的是:没点.*图标启用正则模式,整个表达式被当字面量处理,根本无匹配。
安全提取单层方括号内容的写法
目标是提取[foo]、[bar]这类无嵌套、不含换行的片段,用[([^[]]*)]最稳:
-
[^[]]*明确排除左右方括号,比.*?更防越界 - 必须加括号形成捕获组,后续才能用
$1引用内容 - 查找时按
Alt + Enter(Windows/Linux)或Cmd + Enter(macOS)执行Find All,只选中括号内文本 - 直接
Ctrl + C复制,Ctrl + N新建窗口粘贴,就是干净列表
含换行的方括号内容怎么处理
如果方括号跨行(如[line1
line2]),需先启用. matches newline选项(查找面板右下角勾选),再用[([sS]*?)]:
-
[sS]强制匹配任意字符(含换行),比.可靠 - 仍用
*?保证非贪婪,避免从第一个[吃到文件末尾最后一个] - ⚠️ 注意:若文档含
<script></script>或注释块,[sS]可能误穿进去,建议先手动删掉这些块再操作
跨文件提取时$1失效怎么办
用Ctrl + Shift + F在多个文件中查找,结果面板里$1不会展开——这是 Sublime 的硬限制。此时只能分两步:
- 先在单个文件中验证好正则(如
[([^[]]*)]),确认Find All能精准圈出目标 - 回到
Find in Files面板,只填查找内容,不填替换内容;点击Find All后,结果以“文件名:行号:匹配文本”格式列出 - 复制全部结果 → 新建窗口 → 用
^.*?:d+:s*[([^[]]*)]再次Find All→Alt + Enter→Ctrl + C,完成二次提取
真正容易被忽略的是作用域控制:方括号常出现在 Markdown、配置文件、日志里,但同一份文本中可能混有[[link]]或[][ref]这类语法,正则稍一宽松就会连带抓错。宁可多试几次小范围匹配,也别依赖一次全局替换。

















