正则表达式匹配“不包含某些字符串”的技巧 |
您所在的位置:网站首页 › java正则不包含指定字符串 › 正则表达式匹配“不包含某些字符串”的技巧 |
这篇文章主要介绍了正则表达式匹配不包含某些字符串的技巧,详细分解了应该怎么做和这么做的原因,需要的朋友可以参考下 经常我们会遇到想找出不包含某个字符串的文本,程序员最容易想到的是在正则表达式里使用,^(hede)来过滤 hede 字串,但这种写法是错误的。我们可以这样写:[^hede],但这样的正则表达式完全是另外一个意思,它的意思是字符串里不能包含 'h','e','d' 三个单字符。那什么样的正则表达式能过滤出不包含完整“hello”字串的信息呢? 事实上,说正则表达式里不支持逆向匹配并不是百分之百的正确。就像这个问题,我们就可以使用否定式查找来模拟出逆向匹配,从而解决我们的问题: ^((?!hede).)*$上面这个表达式就能过滤出不包含 'hede' 字串的信息。上面也说了,这种写法并不是正则表达式“擅长”的用法,但它是可以这样用的。 解释 一个字符串是由 n 个字符组成的。在每个字符之前和之后,都有一个空字符。这样,一个由 n 个字符组成的字符串就有 n+1 个空字符串。我们来看一下ABhedeCD这个字符串: 在上面的例子里,每个空字符都会检查其前面的字符串是否不是‘hede’,如果不是,这.(点号)就是匹配捕捉这个字符。表达式(?!hede).只执行一次,所以,我们将这个表达式用括号包裹成组(group),然后用*(星号)修饰——匹配0次或多次: ((?!hede).)*你可以理解,正则表达式((?!hede).)*匹配字符串ABhedeCD的结果false,因为在e3位置,(?!hede)匹配不合格,它之前有hede字符串,也就是包含了指定的字符串。 在正则表达式里,?!是否定式向前查找,它帮我们解决了字符串“不包含”匹配的问题。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |