正则表达式匹配不包含某字符串或单词

发布时间:2019-11-13编辑:脚本学堂
如何用正则表达式匹配时,不包含某个字符口串或某个单词,有关正则表达式不包含指定字符的用法,需要的朋友参考下。

本节内容:
正则表达式匹配不包含某个字符串(不包含某个单词)使用正则表达式找出不包含特定字符串的条目。

正则表达式中有前瞻(Lookahead)和后顾(Lookbehind)的概念,这两个术语非常形象的描述了正则引擎的匹配行为。

注意,正则表达式中的前和后和一般理解的前后有点不同。

一段文本,一般习惯把文本开头的方向称作“前面”,文本末尾方向称为“后面”。
但是,对于正则表达式引擎来说,因为它是从文本头部向尾部开始解析的(可以通过正则选项控制解析方向),因此对于文本尾部方向,称为“前”,因为这个时候,正则引擎还没走到那块,而对文本头部方向,则称为“后”,因为正则引擎已经走过了那一块地方。(www.jb200.com

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

符合和不符合特定匹配模式,又称为肯定式匹配和否定式匹配。

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

前瞻的语法:
 

复制代码 代码示例:

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

var_dump($match);

匹配不包含特定字符串的条目的正则表达式
发表于 2012年5月8日 作者 金晨 — 暂无评论 ↓
记录一下学习正则表达式时困扰了我很长时间的一个问题。

在使用正则表达式时经常会想要排除某个字符串。
看似简单的问题其实还是挺复杂的,在网上查了很多资料,然后理解了什么是预查(前瞻)表达式后才弄懂了怎么排除一个字符串。

解决方法:
 

复制代码 代码示例:
^(?!.*exclude).*$

使用这个表达式可以匹配“ABCincludeXYZ”但不会匹配“ABCexcludeXYZ”。

注意,不能忘了表达式最前面的“^”。
如果没有“^”的话就会匹配“ABCexcludeXYZ”中的“xcludeXYZ”。