如何编写正则表达式检查SQL查询中所有cast()均带safe_前缀
检查SQL中
cast()是否必须以safe_为前缀的正则方案 嘿,作为正则表达式新手,要搞定这个SQL检查需求其实很直观!我来一步步给你拆解怎么做:
核心正则表达式
首先直接给你能用的基础版正则:
\b(?!safe_)cast\(
如果需要忽略大小写(毕竟SQL里关键字大小写不敏感),就用这个适配版:
(?i)\b(?!safe_)cast\(
正则各部分解释
\b:单词边界,确保我们匹配的是独立的cast,不会误匹配比如mycast(这种包含cast的自定义函数名(?!safe_):负向前瞻断言,意思是“当前位置的前面不能是safe_”,完美排除了合法的safe_cast(cast\(:精准匹配cast((括号要转义,因为正则里括号有特殊含义)(?i):不区分大小写标志,让正则能匹配CAST(、Cast(等各种大小写写法的非法调用
用法示例
在VS Code、Sublime Text这类支持正则搜索的编辑器里,把这个正则贴到搜索框,就能快速定位所有不符合要求的cast():
- 会被匹配(需要修改的非法调用):
cast(user_id as STRING)CAST(created_at AS DATE)Cast(total as NUMERIC)
- 不会被匹配(合法的调用):
safe_cast(user_id as STRING)SAFE_CAST(created_at AS DATE)Safe_Cast(total as NUMERIC)
进阶提示(可选)
如果你的SQL里有注释,不想把注释里的cast()当成非法调用,这个正则会稍微复杂一点,但新手可以先从基础版用起——等你熟悉正则后,再考虑加入排除注释的逻辑。
内容的提问来源于stack exchange,提问作者whdgns0665
相关产品推荐
相关产品推荐

