如何使用ripgrep正则匹配SQL中不在单行--注释内的指定字符串
解决方案
你需要开启ripgrep的PCRE2正则支持,使用带负向先行断言的正则即可实现单命令一站式搜索,具体命令如下:
# 替换命令中的foobar为你实际要搜索的字符串即可 rg -P '^(?!--.*foobar).*foobar' *.sql
规则说明
-P参数用于开启ripgrep的PCRE2正则引擎,支持复杂断言逻辑- 正则匹配逻辑:
^匹配当前行的行首位置(?!--.*foobar)是负向先行断言,要求当前行从开头算起,不存在「--后接任意字符再跟目标字符串foobar」的组合,直接过滤掉所有foobar出现在--之后的行.*foobar匹配当前行中存在目标字符串foobar的场景,保证只返回包含目标内容的行
匹配效果验证
完全符合你给出的规则要求:
- 命中行:
SELECT foobar、, foobar(无--前缀或--在foobar之后的场景) - 排除行:
SELECT baz -- foobar、-- foobar、---foobar、-- blah foobar blah(所有foobar出现在--之后的场景)
内容的提问来源于stack exchange,提问作者Chad Baldwin
相关产品推荐
相关产品推荐

