正则表达式中字符串不包含匹配怎么写?

发布时间:2020-09-26编辑:脚本学堂
本文介绍了正则表达式中字符串不包含指定匹配的写法,正则表达式里不支持逆向匹配并不是百分之百的正确,就可以使用否定式查找来模拟出逆向匹配。

要求找出不包含某个字符串的文本,在正则表达式中使用,^(hede)来过滤”hede”字串,但这种写法是错误的。

可以这样写:[^hede],但这种正则表达式完全是指字符串里不能包含h’,‘e’,‘d’三个但字符。

如何用正则表达式能过滤出不包含完整“hello”字串的信息?来看下面的介绍。

正则表达式里不支持逆向匹配并不是百分之百的正确。就像这个问题,就可以使用否定式查找来模拟出逆向匹配,从而解决问题:
^((?!hede).)*$

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

解释:
一个字符串是由n个字符组成的。在每个字符之前和之后,都有一个空字符。
这样,一个由n个字符组成的字符串就有n+1 个空字符串。

来看一下“ABhedeCD”这个字符串:
+--+S = e1 A e2 B e3 h e4 e e5 d e6 e e7 C e8 D e9
+--+index 0 1 2 3 4 5 6 7
  所有的e编号的位置都是空字符。表达式(?!hede).会往前查找,(www.jb200.com)看看前面是不是没有“hede”字串,如果没有(是其它字符),那么.(点号)就会匹配这些其它字符。
这种正则表达式的“查找”也叫做“zero-width-assertions”(零宽度断言),因为它不会捕获任何的字符,只是判断。

以上例子中,每个空字符都会检查其前面的字符串是否不是‘hede’,如果不是,这.(点号)就是匹配捕捉这个字符。

表达式(?!hede).只执行一次,所以,将这个表达式用括号包裹成组(group),然后用*(星号)修饰——匹配 0 次或多次:((?!hede).)*。

可以理解,正则表达式((?!hede).)*匹配字符串"ABhedeCD"的结果 false,因为在e3位置,(?!hede)匹配不合格,它之前有"hede"字符串,也就是包含了指定的字符串。

在正则表达式里,?! 是否定式向前查找,解决了字符串“不包含”匹配的问题。

以上就是正则表达式中字符串不包含某些匹配的方法,希望对大家有所帮助。