[英]Exclude match if string is prefaced with another string
我有一種感覺,這將作為副本關閉,因為這似乎是一個常見的問題......但在我的辯護中,我已經搜索了 SO 以及谷歌,但找不到任何東西。
我正在嘗試使用 ripgrep 搜索 SQL 文件,但我想排除屬於單行 SQL 注釋的匹配項。
/* foobar */
注釋。 只有單行-- foobar
SELECT '-- foobar'
或SELECT '--', foobar
。 我可以接受那些錯誤的排除。匹配示例:
SELECT foobar
, foobar
SELECT baz -- foobar
-- foobar
---foobar
-- blah foobar blah
AKA,搜索foobar
但如果--
出現在該行之前的任何點,則忽略匹配。
我已經嘗試過諸如負面后視和其他方法之類的方法,但我似乎無法讓它們發揮作用。
這個答案似乎會讓我到達那里: https://stackoverflow.com/a/13873003/3474677
該答案說使用(?<!grad\()vec
來查找不以grad(
開頭的vec
匹配項。因此,如果我將其轉換為我的用例,我將得到(?<!--)foobar
。這有效...但僅用於排除包含--foobar
的行,它不處理其他場景。
最壞的情況,我可以將 ripgrep 的結果 pipe 放入另一個過濾器並排除匹配的行--.*foobar
但我希望找到一個多合一的解決方案。
根據評論,使用 ripgrep 和 enable --pcre2
您可以使用:
^(?:(?!--).)*\bfoobar\b
^
字符串開頭(?:
非捕獲組
(?.--).
負前瞻,從當前 position 斷言沒有--
直接向右。 如果該斷言為真,則匹配除換行符以外的任何字符)*
關閉非捕獲組並選擇性地重復它\bfoobar\b
匹配單詞foobar
查看正則表達式演示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.