正则表达式匹配不包含某些字符串的写法

清泛编译

经常我们会遇到想找出不包含某个字符串的文本,程序员最容易想到的是在正则表达式里使用,^(hede)来过滤”hede”字串,但这种写法是错误的。我们可以这样写:[^hede],但这样的正则表达式完全是另外一个意思,它的意思是字符串里不能包含‘h',‘e',‘d'三个但字符。那什么样的正则表达式能过滤出不包含完整“hello”字串的信息呢?

事实上,说正则表达式里不支持逆向匹配并不是百分之百的正确。就像这个问题,我们就可以使用否定式查找来模拟出逆向匹配,从而解决我们的问题:

^((?!hede).)*$

上面这个表达式就能过滤出不包含‘hede'字串的信息。我上面也说了,这种写法并不是正则表达式“擅长”的用法,但它是可以这样用的。

那么,如果想不包含多个字符串,如不包含 hede 和 waqa 两个字符串呢?' | '连接两个字符串即可:

^((?!hede|waqa).)*$

(注:| 是或者逻辑,但这里是反向不包含,因此变成了 且逻辑)

具体原理解释请参考:http://www.jb51.net/article/52491.htm。

正则表达式 不包含 字符串

分享到:
评论加载中,请稍后...
创APP如搭积木 - 创意无限,梦想即时!
回到顶部