grep的-v参数可以找出不匹配正则表达式的所有字符串。
如何用正则表达式完成这个需求呢?
利用“零宽度断言”就可以做到。不过请先让我解释一下“零宽度断言”这个概念。
零宽度是指要匹配的部分没有长度,比如说匹配一句话中以ing结尾的词,但是要求结果不包含ing本身,那么ing就是零宽度。
断言就是assert,其实也就是验证的意思。
例子,使用零宽度断言:找出某个目录下所有jpg格式文件的文件名(但是不包含.jpg本身)
假如目录下有foo.jpg,bar.png,baz.gif 三个文件,foo将被匹配出来。
(?=)叫做正预测,那反过来负预测是(?!),表示后面不跟特定字符,不过:
将能匹配到foo.jpg, bar.png, baz.gif。为什么foo.jpg还是被匹配了呢?
上面的正则表达式有问题—foo.jpg对最后一个字符g的后面也的确不是.jpg
问题到此似乎变得很不明朗,不过将问题转化一下可能更有助于我们思考如何达成目的。
将这个问题等同于:字符串里面的任意字符后面都不能是.jpg,按照此思路,把正则表达式更改为:
更改后可以看到foo.jpg将不包含在结果里面了。
另外,如何利用grep做测试,正则表达式其实也不止一种,以上是perl风格的正则表达式,所以在用grep测试时一定要记得加-P参数来让上面的正则生效:
不包含字符串abc的正则表达式
分类: javascript 2012-05-17 15:38 1710人阅读 评论(0) 收藏 举报
正则表达式测试c
[^abc]表示不包含a、b、c中任意字符, 我想实现不包含字符串abc应该如何写表达式?
最简洁的写法:
匹配由字母或数字或下划线或汉字组成的字串,但字串中不能出现abc
解释:
以上就是正则表达式判断字符串是否不包含指定的子字符串的方法,希望对大家有所帮助。