これはよくある質問のように思われるため、重複として閉じられると感じています...しかし、私の弁護では、GoogleだけでなくSOも検索しましたが、何も見つかりませんでした。
ripgrep を使用して SQL ファイルを検索しようとしていますが、1 行の SQL コメントの一部である一致を除外したいと考えています。
/* foobar */
複数行のコメントについて心配する必要はありません。単線のみ-- foobar
- 何もキャプチャする必要はありません
SELECT '-- foobar'
またはのように、文字列がテキストの一部である可能性について心配する必要はありませんSELECT '--', foobar
。私はそれらの誤った除外で大丈夫です。
一致例:
- マッチ:
SELECT foobar
- マッチ:
, foobar
- 除外:
SELECT baz -- foobar
- 除外:
-- foobar
- 除外:
---foobar
- 除外:
-- blah foobar blah
別名、一致を検索しますが、その行の前の任意の時点でfoobar
一致が発生した場合は無視します。--
否定的な後読みなどの方法を試しましたが、うまくいかないようです。
この答えは私をそこに連れて行くように思えました: https://stackoverflow.com/a/13873003/3474677
その答えは、の前に付いていない(?<!grad\()vec
一致を見つけるために使用するように言っています。したがって、それを私のユースケースに翻訳すると、. これは機能します...ただし、それを含む行を除外する場合のみ、他のシナリオは処理されません。vec
grad(
(?<!--)foobar
--foobar
最悪の場合、ripgrep の結果を別のフィルターにパイプして、一致する行を除外する--.*foobar
こともできますが、オールインワンのソリューションを見つけたいと思っています。