应使用上下文锚定正则,如(?

匹配并替换SQL中所有未加引号的字段名
直接用 ^[a-zA-Z_][a-zA-Z0-9_]*$ 会误伤整行,真正要处理的是 SELECT 后、逗号前、等号右边这些位置的裸字段。推荐用上下文锚定:比如替换 SELECT a, b, c FROM 中的 a、b、c,正则写成 (?。
注意点:
- 必须开启 Sublime 的「Match Case」和「Regex」开关(右下角图标)
-
\b防止把user_id替换成`user_id`时连带改掉user_id_str里的user_id - 如果字段含数字开头(如
2023_total),需把开头[a-zA-Z_]改成[a-zA-Z_0-9],但要小心和纯数字字面量冲突
给所有字符串字面量统一加上单引号
目标是把 WHERE status = active → WHERE status = 'active',但不能动已有引号的、注释里的、或列别名(如 AS user_name)。安全做法是限定在 = 或 IN 后、且后面没引号/括号/分号的位置:
查找:(?
替换:'$1'
常见翻车点:
- 没加
\b导致updated_by被替换成'updated'_by - 忘了排除注释 —— 加上
(?











