最近项目中要用到一个正则表达式,排除某个字符串,我们知道排除单个字符串的话,可以用[^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 ),成功匹配。
