Sublime中Ctrl+H替换需手动开启右下角.*正则开关,否则\d、\n等被当字面字符;匹配字面符号需转义,捕获组用()并引用$1,单词边界\b防误替,\s含换行需注意空行删除逻辑。

Sublime 中 Ctrl+H 替换框默认不启用正则,必须手动点开
很多人输完查找内容、替换内容后直接点 Replace All,结果没生效——根本原因是正则开关没打开。这个按钮在替换面板右下角,图标是 .*,点击后变蓝才表示正则已激活。不点它,\d、\s、^ 这些全当普通字符处理,毫无作用。
常见错误现象:\n 想换行结果替换成两个字符「\」和「n」;\t 被字面替换而非制表符;\\ 写成单反斜杠直接报错。
- Windows/Linux 用
Ctrl+H,macOS 用Cmd+H打开替换面板 - 务必点击右下角
.*图标(或按Alt+R切换) - 若需匹配字面意义的
.、+、?等,得写成\.、\+、\?
匹配换行和空白字符要用 \n、\t、\s,但注意 \s 包含 \n
想把多行文本合并成一行?别用 \r\n —— Sublime 基于 PCRE,统一用 \n 表示换行(无论文件是 Windows 还是 Unix 换行符)。想删空行?用 ^\s*$\n,但要注意末尾的 \n 是真正要删掉的换行符,不是匹配的一部分。
性能提示:\s 会匹配空格、制表符、换行符、回车符、垂直制表符、换页符,比单独写 [ \t\r\n\f\v] 更简洁,但若只想匹配空格和制表符,用 [ \t] 更精准、更安全。
- 替换所有换行符为空格:
Find:\n→Replace:(一个空格) - 删空行(含只有空白的行):
Find:^\s*$\n→Replace:空 - 匹配中文字符之间的空格(避免误伤英文单词内空格):
[\u4e00-\u9fa5]\s+[\u4e00-\u9fa5]
$1、$2 引用捕获组,但括号必须用 \( 和 \) 转义
Sublime 的正则引擎对字面括号要求严格:普通括号 () 是元字符,要匹配字面的 ( 或 ),必须写成 \( 和 \)。反过来,想做分组捕获,就得用未转义的 ()。
典型场景:把 func(arg1, arg2) 改成 func{arg1, arg2}。如果写成 func\(.*?\),那只是匹配,没法提取内容;得写 func\((.*?)\),再在替换栏写 func{$1} 才行。
- 错误写法:
Find:func\(.*?\)→ 无法捕获,$1为空 - 正确写法:
Find:func\((.*?)\),Replace:func{$1} - 多个捕获组:
Find:(\d{4})-(\d{2})-(\d{2})→Replace:$3/$2/$1(转成 DD/MM/YYYY)
批量改函数名或变量名时,用 \b 避免子串误匹配
搜 user 想替换成 account,结果把 username 也干掉了——这是没加词边界锚定。Sublime 支持 \b(单词边界),它匹配的是「字母/数字/下划线」与「非字母数字下划线」之间的位置,不消耗字符。
注意:\b 对中文无效(中文字符不属于 \w),所以处理中英文混排时,得组合使用,比如 (? 更稳妥;但多数纯英文项目,\buser\b 就够用。
- 安全替换变量:
Find:\buser\b→Replace:account - 匹配带下划线前缀的私有变量:
Find:\b_user_\b(注意_属于 \w,所以\b依然生效) - 排除注释里的误匹配?Sublime 本身不支持排除语法域,得靠人工确认或先用
Ctrl+Shift+F全局搜索过滤上下文
正则替换真正难的不是语法,而是每次替换前得想清楚:这个模式会不会跨行?有没有隐藏空白?是否该用懒惰匹配?.* 很方便,但往往太贪心,一匹配就到文件末尾——这时候 .*? 或更具体的字符集才是解药。










