在正则表达式/eclipse 搜索中查找不包含双正斜杠的行

find lines not containing double forward slash in regex / eclipse search

在 Eclipse 中搜索仅包含 'foo' 的未注释行时,我也收到了注释行。

找不到:

    // foo 
    // foobar
        // foo 
     // foobar
    // // foobar
     bar // foobar

待发现:

     foo 
    / foobar
       bar foo 
     foobar

我尝试否定前瞻/后视和转义/未转义正斜杠 以下都没有在全局搜索中工作,即它们都还 return // lines

    ^.*(?!//).*foo.*$
    ^.*(?<!\/\/).*foo.*$

是否有匹配这些行的有效正则表达式?

Casimir et Hippolyte 的建议很有效:

    ^(?:(?!//).)*?foo.* 

用于在 eclipse 中替换(即将行设置为注释)我使用 搜索

    search  : (^(?:(?!//).)*?foo.*)
    replace : // 

您可以使用

^([^/\n]*(?:/(?!/)[^/\n]*)*?foo.*)

并替换为 //。参见regex demo

这与

基本相同的模式 (demo)
^((?:(?!//).)*?foo.*)

但展开以获得更好的性能。

看看这些模式是如何工作的:

  • ^((?:(?!//).)*?foo.*) 将字符串的开头与 ^ 匹配,然后是除换行符字符 (.) 之外的任何字符,它不会启动 // 字符序列((?!//)) 重复 0 次或更多次,但次数尽可能少(由于 *?),然后匹配 foo 并且 .* 匹配字符串的其余部分
  • ^([^/\n]*(?:/(?!/)[^/\n]*)*?foo.*) 也匹配字符串的开头,然后 [^/\n]* 匹配除 / 和换行符之外的 0 个或多个字符(使用 [^/\n]*,留在同一行),然后 (?:/(?!/)[^/\n]*)*? 匹配 0 次或多次重复的 / 序列,后面没有跟另一个 /(参见 /(?!/)),然后匹配 0 次或多次重复以外的字符/ 和换行符,然后 foo 和行的其余部分与 foo.*.
  • 匹配