在eclipse中仅搜索包含'foo'的未注释行时,我也会收到注释行。
找不到:
// foo
// foobar
// foo
// foobar
// // foobar
bar // foobar
要找到:
foo
/ foobar
bar foo
foobar
我尝试使用负向前瞻/向后搜索和转义/未转义的正斜杠 以下两项都无法在全局搜索中使用,即它们都还返回//行
^.*(?!//).*foo.*$
^.*(?<!\/\/).*foo.*$
是否存在可以匹配这些行的正则表达式?
答案 0 :(得分:1)
您可以使用
^([^/\n]*(?:/(?!/)[^/\n]*)*?foo.*)
,并替换为//\1
。请参见regex demo。
这基本上是与
相同的模式(demo)^((?:(?!//).)*?foo.*)
但已展开以提高性能。
看看这些模式是如何工作的:
^((?:(?!//).)*?foo.*)
将字符串的开头与^
匹配,然后将除换行符(.
)之外的其他任何不以//
字符序列开头的字符({ {1}})重复0次或更多次,但要重复几次(由于(?!//)
),然后匹配*?
,而foo
则匹配字符串的其余部分.*
也匹配字符串的开头,然后^([^/\n]*(?:/(?!/)[^/\n]*)*?foo.*)
匹配0个或多个除[^/\n]*
和换行符(带有/
)之外的字符,以保持在同一行),然后[^/\n]*
匹配0个或多个不重复的(?:/(?!/)[^/\n]*)*?
重复,再匹配另一个/
(请参阅/
),然后匹配0个或多个除{{ 1}}和换行符,然后是/(?!/)
,其余行与/
匹配。答案 1 :(得分:0)
Casimir et Hippolyte的建议非常有用:
^(?:(?!//).)*?foo.*
用于替换日食(即将行设置为注释),我使用 搜索
search : (^(?:(?!//).)*?foo.*)
replace : //\1