用到一个正则表达式,排除某个字符串,排除单个字符串可以用[^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>