[正则表达式]如何判断字符串中不包含某些子字符串呢?

来源:互联网 发布:httpclient put json 编辑:程序博客网 时间:2024/04/28 09:36
 

如果要判断的是字符串中不包含某一些字符的话可以直接使用^[^foobar]+$来处理,或者判断是否包含了某些字符串可以直接使用^/w*(foo|bar)/w*$来处理,可是当要判断不包含某一些字符串的时候就没有那么方便了……搞了一小会儿得出的结论是:无法完美解决该问题。。。

方法^/w*(f(?!oobar))/w*$虽然可以匹配所有不包含foobar字符串的内容,不过条件是,内容中必须含有f字符,否则就无法匹配。。。因此考虑或者的情况^(f(?!oobar)|[^f](?!foobar))+$当以f开头的时候和不以f开头的时候分别匹配。

可是上面的方法还是不好,每个要不匹配的字符串都要把首字母单独列出来,因此重新设计方法^((?<!foobar)/w(?!foobar))+$结果虽然可以匹配所有不包含foobar字符串的内容,可是却不能匹配foobar本身。。。再改。。。^((?!foobar)/w)+$这个匹配的意思是在/w前不以foobar为结尾的字符集合,因此foobar在结尾或者在中间的情况肯定都是不能匹配的,关键在于foobar在开头的情况和foobar本身,这里我使用了^$界定符来设定需要被匹配的内容边界是整段内容,那么foobar在开头的情况下开始符^也作为匹配字符使得^foobar成为以foobar为结尾的字符串,因此foobar在开头亦不能匹配,那么foobar本身也不能匹配就好理解了。

这样问题看似就解决了,但是具体情况具体分析,这里必须使用界定符才能匹配内容,如果是要查找所有不带a字母的单词,那么界定符可以换成/b即/b((?!a)/w)+/b(虽然有更方便的方法/b[^a]+/b。。。)

当然有人会说我这样判断内容中是否包含字符串foobar多麻烦,直接使用indexOf或者其他字符串提供的方法就可以很方便查找到了。。。确实呀。。。但是具体情况还是要具体分析,这次其实是想做一个URLrewrite,想对所有的urlpath.html重定义到一个新的地址,但是有一些urlpath想过滤掉直接调用原地址,因此就有了以上这些探索和学习。。。


原创粉丝点击