正则表达式匹配不包含某些字符串的写法
经常我们会遇到想找出不包含某个字符串的文本,程序员最容易想到的是在正则表达式里使用,^(hede)来过滤”hede”字串,但这种写法是错误的。我们可以这样写:[^hede],但这样的正则表达式完全是另外一个意思,它的意思是字符串里不能包含‘h',‘e',‘d'三个但字符。那什么样的正则表达式能过滤出不包含完整“hello”字串的信息呢?
事实上,说正则表达式里不支持逆向匹配并不是百分之百的正确。就像这个问题,我们就可以使用否定式查找来模拟出逆向匹配,从而解决我们的问题:
^((?!hede).)*$
上面这个表达式就能过滤出不包含‘hede'字串的信息。我上面也说了,这种写法并不是正则表达式“擅长”的用法,但它是可以这样用的。
那么,如果想不包含多个字符串,如不包含 hede 和 waqa 两个字符串呢?' | '连接两个字符串即可:
^((?!hede|waqa).)*$
(注:| 是或者逻辑,但这里是反向不包含,因此变成了 且逻辑)
具体原理解释请参考:http://www.jb51.net/article/52491.htm。