sublime text 正则替换不生效需先开启正则模式(点击 .* 图标或勾选 regular expression);替换中捕获组引用必须用 $1 而非 \1;删空行用 ^\s*$\r?\n;中文匹配用 [\u4e00-\u9fa5];编码须为 utf-8。

Sublime Text 正则替换不生效?先确认是否开了正则模式
默认情况下,Sublime Text 的查找框走的是普通字符串匹配。你写 ^\s* 却没反应,不是语法错,是根本没进正则引擎。
- 点击查找面板右下角的
.*图标(它亮起时才启用正则) - 或按
Ctrl+R(Win/Linux)或Cmd+R(Mac)后,手动勾选Regular expression复选框 - 如果用了
\1、$2这类捕获组引用却报错,大概率是没开正则,或者括号没用()而用了中文括号
捕获组怎么写?$1 和 \1 到底该用哪个
Sublime Text 用的是 PCRE 风格,但替换字段里必须用 $1、$2,不是 \1。写成 \1 会被当字面量处理,结果就是把反斜杠和数字原样贴进去。
- 查找:
(\d{4})-(\d{2})-(\d{2})→ 匹配2023-10-05 - 替换:
$3/$2/$1→ 得到05/10/2023(正确) - 替换:
\3/\2/\1→ 得到\3/\2/\1(错误,原样输出) - 注意:命名捕获组可用
${name},比如(?P<year>\d{4})-(?P<month>\d{2})</month></year>,替换写${month}/${year}
想批量删空行或首尾空格?别硬套网上万能正则
很多教程抄来抄去的 ^\s*$\n 在 Sublime 里会多删一行——因为 $\n 同时匹配了“行尾”和“换行符”,导致下一行被吞掉。
- 删纯空行(含只有空格的行):
^\s*$\r?\n→ 替换为空(注意 Windows 是\r\n,macOS/Linux 是\n,\r?更稳妥) - 删每行开头空格:
^[ \t]+→ 替换为空(\s会误杀全角空格、NBSP,明确写[ \t]更可控) - 删行尾空格:
[ \t]+$→ 替换为空(别加\n,否则会连换行一起干掉,造成文本粘连) - 性能提示:大文件慎用
^.*$类全局匹配,Sublime 渲染会卡顿
中文、emoji、Unicode 字符匹配总失败?检查编码和字符类
Sublime Text 默认按 UTF-8 解析文件,但如果你的文件是 GBK 编码且没正确识别,正则里的 \u4e00-\u9fa5 就会失灵——不是正则错,是字节流根本对不上。
- 先确认右下角状态栏显示的是
UTF-8,不是Hexadecimal或乱码编码名 - 匹配中文推荐用
[\u4e00-\u9fa5](基本汉字),别用\p{Han}(Sublime 不支持 Unicode 属性类) - 匹配 emoji:
[\u{1F600}-\u{1F64F}]这种带{}的写法无效;得拆成多个范围,如[\u1F600-\u1F64F\u1F300-\u1F5FF] - 不确定字符实际编码?选中它 → 右键 →
Selection → Encode HTML Entities,看转义结果反推
正则本身没玄学,但 Sublime 对换行、编码、捕获组引用的处理很实在——错一点,结果就差一整行。调的时候盯着状态栏的 .* 开关、右下角编码、还有替换预览里的高亮匹配段,比查文档快得多。











