天空小小岛技术论坛

 找回密码
 注册
搜索
查看: 13465|回复: 0

[分享] 正则表达式匹配不包含某个字符串(不包含某个单词)

[复制链接]
s.Bo 发表于 2013-11-13 17:14:15 | 显示全部楼层 |阅读模式
正则表达式匹配不包含某个字符串(不包含某个单词)使用正则表达式找出不包含特定字符串的条目


这里要使用否定式前瞻

正则表达式中有前瞻(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);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|天空小小岛 ( 京ICP备17043412号-1|

GMT+8, 2018-11-21 07:23 , Processed in 0.097929 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表