排除包含某个字符串的正则表达式
一直困扰着我,今天在一个国外的网站上找到答案,虽然没完全解决问题,但希望能抛砖引玉
比如有以下代码:
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☆
☆为全文没有的特殊字符
②然后再检索^[^☆]$ -- 这样就排除了含有☆的行
③最后清除掉☆
但感觉此为下策了。