<p>Sublime Text 默认不开启正则搜索,需点击查找面板右下角 .* 按钮或用快捷键 Alt+R(Win/Linux)/Cmd+Alt+R(macOS)启用;查找与替换的正则开关相互独立,替换中捕获组须用 而非 $1。</p>

Sublime Text 正则搜索开关在哪
默认不开启正则模式,必须手动点开 .* 按钮(位于查找面板右下角),否则 d、^、$ 这类符号全当普通字符匹配,搜不到任何东西。
常见错误:写了一堆 s+ 或 [a-z]+ 却没点 .*,结果“找不到匹配项”——不是正则写错了,是根本没进正则引擎。
- 快捷键:
Alt+R(Windows/Linux)或Cmd+Alt+R(macOS)可快速切换正则开关 - 在替换框里也得单独点一次
.*,查找和替换的正则开关是独立的 - 如果启用了
Match Case或Whole Word,它们会和正则共存,但可能干扰预期行为(比如word和勾选Whole Word一起用,可能重复限制)
常用元字符和 Sublime 的实际表现
Sublime Text 基于 Boost.Regex 引擎(v4.0+ 改为 Oniguruma),多数 PCRE 语法可用,但少数有差异。别直接套用 PHP 或 JavaScript 的正则经验。
这些能用:d、w、s、^、$、、(?:...)、(?i) 内联标志;这些要小心:K 不支持,R(通用换行符)行为不稳定,\ 在字符串中需写成 \\ 才能匹配单个反斜杠。
-
^和$默认匹配每行首尾(不是整个文件),不用加m标志 -
按 Unicode 字符边界判断,中文也能用,比如测试可匹配独立“测试”二字 - 想跨行匹配?用
(?s)pattern启用单行模式,此时.才能匹配换行符;否则.永远不匹配
替换时怎么引用捕获组
替换框里不能用 $1、$2,必须用 、 —— 这是最常踩的坑。Sublime 不支持美元符号式反向引用。
示例:把 func(name) 改成 name.func(),查找:(w+)((w+)),替换:.()。如果误写成 $2.$1(),结果就是字面输出 $2.$1(),不会做替换。
- 命名捕获组可用:
(?P<name>w+)</name>,替换时写g<name></name>(注意是g<name></name>,不是$name) - 替换中想插入字面反斜杠?写两个:
\→ 实际插入一个 - 如果替换内容含换行,直接在替换框里按
Enter换行即可,不需要写
性能差或卡死?多半是回溯爆炸
写 .* 或 .+ 匹配大段文本时,尤其嵌套量词(如 (a+)+)或松散边界(如 .*if.*else.*),Sublime 可能假死几秒甚至崩溃——它用的是回溯引擎,没有自动超时机制。
- 优先用贪婪控制:把
.*换成[^"]*(匹配非引号字符)或.*?(惰性匹配),能大幅降低回溯量 - 避免无锚定长匹配:查
function.*{很慢,改成functions+w+s*{更稳 - 大文件搜索前,先用
Ctrl+Shift+P→Restrict Find to Selection锁定范围,比全文件硬扫快得多
正则不是万能胶,复杂结构解析(比如嵌套括号、HTML 标签)别硬刚,该上专用工具就上专用工具。

















