正则判断字符串是否不包含指定的子字符串

发布时间:2020-04-30编辑:脚本学堂
本文介绍了使用正则表达式判断字符串不包含某子字符串的方法,找出不匹配正则表达式的所有字符串,感兴趣的朋友参考下。

grep的-v参数可以找出不匹配正则表达式的所有字符串。
如何用正则表达式完成这个需求呢?

利用“零宽度断言”就可以做到。不过请先让我解释一下“零宽度断言”这个概念。

零宽度是指要匹配的部分没有长度,比如说匹配一句话中以ing结尾的词,但是要求结果不包含ing本身,那么ing就是零宽度。
断言就是assert,其实也就是验证的意思。

例子,使用零宽度断言:找出某个目录下所有jpg格式文件的文件名(但是不包含.jpg本身)
 

^.+(?=.jpg)$

假如目录下有foo.jpg,bar.png,baz.gif 三个文件,foo将被匹配出来。

(?=)叫做正预测,那反过来负预测是(?!),表示后面不跟特定字符,不过:
 

^.+(?!.jpg)$

将能匹配到foo.jpg, bar.png, baz.gif。为什么foo.jpg还是被匹配了呢?

上面的正则表达式有问题—foo.jpg对最后一个字符g的后面也的确不是.jpg

问题到此似乎变得很不明朗,不过将问题转化一下可能更有助于我们思考如何达成目的。
将这个问题等同于:字符串里面的任意字符后面都不能是.jpg,按照此思路,把正则表达式更改为:
 

^((?!.jpg).)*$

更改后可以看到foo.jpg将不包含在结果里面了。

另外,如何利用grep做测试,正则表达式其实也不止一种,以上是perl风格的正则表达式,所以在用grep测试时一定要记得加-P参数来让上面的正则生效:
 

grep -P -e '^((?!.jpg).)*$'

不包含字符串abc的正则表达式
分类: javascript 2012-05-17 15:38 1710人阅读 评论(0) 收藏 举报
正则表达式测试c
[^abc]表示不包含a、b、c中任意字符, 我想实现不包含字符串abc应该如何写表达式?
最简洁的写法:
 

b((?!abc)w)+b

匹配由字母或数字或下划线或汉字组成的字串,但字串中不能出现abc

解释:
 

b 匹配单词的开始或结束;
?!exp 零宽负向先行断言,只会匹配后缀exp不存在的位置;
w 匹配字母或数字或下划线或汉字;
+ 重复一次或更多次;
b((?!abc)w)+b 匹配由字母或数字或下划线或汉字组成的字串,但字串中不能出现abc。

以上就是正则表达式判断字符串是否不包含指定的子字符串的方法,希望对大家有所帮助。