正则表达式不匹配某个字符串怎么实现?

发布时间:2021-01-17编辑:脚本学堂
本文介绍了正则表达式不匹配某个字符串的写法,使用正则表达式找出不包含特定字符串的条目,感兴趣的朋友参考下。

用到一个正则表达式,排除某个字符串,排除单个字符串可以用[^abc],这么写可以排除a或者b或者c了,怎么排除abc呢?

自己写了个,php下测试可用,如匹配非.php这个字符,正则表达式:
 

.[^p]{1}[^h]{1}[^p]{1}

php代码:
 

<?php
$subject = "neeao.gif";
$pattern = '/.[^p]{1}[^h]{1}[^p]{1}/';
preg_match($pattern, $subject, $matches);
print_r($matches);
?> 
 

返回结果为:
Array ( [0] => .gif )

说明匹配成功了,其它语言的都大同小异。

上面提到的只适合单个匹配的情况,没有考虑多个字符串的情况。

另外一种可以使用的方法:
 

(?!php|gif).{3}

不匹配php和gif,且字符串长度为3的字符串,测试之:

正则表达式测试工具
 

<?php
$subject = "neeao.php.gif.ljk";
$pattern = '/.(?!php|gif).{3}/is';
preg_match($pattern, $subject, $matches);
print_r($matches);
?> 
 

结果:Array ( [0] => .ljk ),成功匹配。

附1,使用正则表达式找出不包含特定字符串的条目。

1.perl代码 
 

^xl_(?!.*?_online).*?$

附2,正则匹配不包含某字符串(python
正则表达式如何匹配源串中不包含否某字符串?匹配不包含字符串redice,正则表达式:
^((?!redice).)*$
测试:
 

>>> import re
>>> cr = re.compile(r'^((?!redice).)*$')
>>> s = 'i am redice.'
>>> cr.search(s) # 源串中含有redice,不匹配
>>> s = 'life is short, you need Python.'
>>> cr.search(s) # 匹配,因为源串中不含redice
<_sre.SRE_Match object at 0x0000000002538C60>