排除包含某个字符串的正则表达式

时间:2022-01-16 05:51:16

排除包含某个字符串的正则表达式

 

一直困扰着我,今天在一个国外的网站上找到答案,虽然没完全解决问题,但希望能抛砖引玉

比如有以下代码:

 

if a=b then

    i love u

    how are you

end if

 

我想选中不含有if的语句。也就是if语句块里包含的那两句话。

 

网上见过此方法:

^[^(if)]+$

但这是错误的,因为只含有i或f的行也被排除在对象外,如"i love u"

 

正确的应该是:

^([^f]|[^i]f)+$

解释:

① ^ 句子开头

② [^f]排除掉f (if也是排除对象)

③ [^i]f排除掉if   (如果没有②,则nfdfefgfaflf等"_f"字符串都被选中,加上②后,不以i开关的f都被干掉啦)

——②或③,则生成了排除掉if的条件

④ +表示括号中的字符重复1次以上

⑤ $ 句子结尾

在EmEditor的正则表达式下测试通过。

 

这方法比较笨,只限于两字符,如果排除的字符串为congratulation这样的东西,就麻烦了。据偶现在的水平,还不知道怎么做才是最方便的。

 

如果 .*[^(congratulation)].* 能办到就好了:(

 

当然也可以用间接的方法,比较通用:

①先置换 if/w* 为 /1☆

☆为全文没有的特殊字符

②然后再检索^[^☆]$ -- 这样就排除了含有☆的行

③最后清除掉☆

 

但感觉此为下策了。