Sublime正则需同时满足开关开启、语法正确、编码为UTF-8三条件,否则$1原样输出、^/$仅匹配全文首尾、中文不匹配;跨行用[\s\S]*?,中文匹配须设UTF-8 with BOM。

Sublime 的正则不是“写对就能用”,必须同时满足开关、语法、编码三者到位,否则$1原样输出、^只认全文开头、中文全不匹配——这不是正则写错了,是环境没配对。
为什么$1总被当字面量输出
根本原因就三个硬条件没齐:右下角.*图标没点亮(或没按Alt+R)、查找框里用了()但状态栏没显示“Regex”、替换框写了\1或${1}而不是$1。
-
$1是唯一稳定写法;写$$才表示字面量$ - 嵌套括号也占编号:
(a(b(c)))中,$1 = abc、$2 = bc、$3 = c,Sublime 不支持(?:)非捕获组 - 替换前务必先点
Find All(Alt+Enter),看高亮是否精准圈出目标——这一步跳过,后面全是白忙活
^和$不匹配每行首尾怎么办
默认行为就是^只匹配整个文本开头,$只匹配整个文本结尾。比如搜^import,只会命中第一行,其他全漏。
- 必须启用多行模式:点击右下角
⇧图标(或按Alt+M),或在正则前加(?m),如(?m)^import - Windows 下
$会停在\r前,导致替换后残留回车;统一用\R(Sublime 内置通用换行符)更稳 - 中文界面下某些插件会干扰换行符识别,临时切回
Plain Text语法(Ctrl+Shift+P→Set Syntax: Plain Text)再试
跨行匹配总卡死或吞太多内容
.默认不匹配换行符,这是 Sublime 的硬性限制,不是设置没开对。强行勾选. matches newline在Ctrl+Shift+F(跨文件搜索)中常失效,且容易触发贪婪回溯爆炸。
- 稳妥写法是放弃
.*?,改用[\s\S]*?:匹配任意内容(含换行)→[\s\S]*?;匹配大括号体 →\{[\s\S]*?\} - 提取函数参数(含换行):用
\(([\s\S]*?)\),比\(([^)]*)\)更安全 - 大文件(>5MB)慎用跨行正则;先用
Find in Files定位范围,再分块操作
中文、全角空格、混合编码清洗失败
这些不是正则语法问题,而是底层行为陷阱:\s只匹配 ASCII 空白符(\t\n\r\f\v和半角空格),对全角空格(U+3000)、不间断空格(U+00A0)完全无效;中文不匹配,大概率是状态栏显示编码不是 UTF-8。
- 中文匹配失败:执行
File → Save with Encoding → UTF-8 with BOM最稳(Windows 下常误判为 GBK) - 查全角空格:直接复制一个进查找框,或输入
\u3000;批量清理混合空白用[ \t\n\r\f\v\u3000\u00A0\u2000-\u200B\u2028\u2029]+替换为单个半角空格 -
\buser\b匹配到username:因为 Sublime 把_和数字也当单词字符;简单场景直接加空格或冒号限定,如user或user:
真正卡住人的从来不是正则本身,而是每次替换前忘了点Find All验证命中范围,以及大文件操作时没关掉Highlight matches和Auto expand selection——这两项一开,极易假死。

















