天空小小岛技术网站

标题: 正则表达式匹配不包含某个字符串(不包含某个单词) [打印本页]

作者: s.Bo    时间: 2013-11-13 17:14
标题: 正则表达式匹配不包含某个字符串(不包含某个单词)
正则表达式匹配不包含某个字符串(不包含某个单词)使用正则表达式找出不包含特定字符串的条目


这里要使用否定式前瞻

正则表达式中有前瞻(Lookahead)和后顾(Lookbehind)的概念,这两个术语非常形象的描述了正则引擎的匹配行为。需要注意一点,正则表达式中的前和后和我们一般理解的前后有点不同。一段文本,我们一般习惯把文本开头的方向称作“前面”,文本末尾方向称为“后面”。但是对于正则表达式引擎来说,因为它是从文本头部向尾部开始解析的(可以通过正则选项控制解析方向),因此对于文本尾部方向,称为“前”,因为这个时候,正则引擎还没走到那块,而对文本头部方向,则称为“后”,因为正则引擎已经走过了那一块地方。

所谓的前瞻就是在正则表达式匹配到某个字符的时候,往“尚未解析过的文本”预先看一下,看是不是符合/不符合匹配模式,而后顾,就是在正则引擎已经匹配过的文本看看是不是符合/不符合匹配模式。符合和不符合特定匹配模式我们又称为肯定式匹配和否定式匹配。

现代高级正则表达式引擎一般都支持都支持前瞻,对于后顾支持并不是很广泛,因此我们这里采用否定式前瞻来实现我们的需求。

前瞻的语法是:

  1. (?!匹配模式)
复制代码


$a = 'http://tkxxd.com/xx';
// $a = 'http://tkxxd.net/xx';
// $a = 'http://baidu.com/xx';
找出不含 baidu 的
preg_match("/http\:\/\/(?!baidu)[^\/]+/i", $a, $match);

var_dump($match);




欢迎光临 天空小小岛技术网站 (http://tkxxd.net/) Powered by Discuz! X3.1