正则表达式不匹配某个字符串,java正则不包含指定字符串

  正则表达式不匹配某个字符串,java正则不包含指定字符串

  测试数据:

  如何解决写爬虫IP受阻的问题?立即使用。

  例如,上面这些简单的日志条目,我们想要实现两个目标:

  1.过滤掉8号的数据;

  2.找出不包含robots.txt字符串的条目(只要过滤掉所有包含robots.txt的URL)。

  前瞻性语法是:

  (?Pattern)让我们首先实现第一个目标——,匹配不以特定字符串开头的条目。

  因为我们这里要排除一个连续的字符串,所以匹配的模式很简单,就是2009-07-08。实现如下:

  ^(?2009-07-08).*?$使用Expresso,我们可以看到结果确实过滤掉了8号的数据。

  接下来,让我们实现第二个目标——,排除包含特定字符串的条目。

  按照我们上面写的方式,我画了一幅葫芦画:*?(?机器人\。txt)。*?$这个规则用白话描述就是:以任意字符开头,然后不跟robots.txt连续字符串,再跟任意字符,字符串结束。

  运行测试,发现:

  没有达到预期的效果。这是为什么呢?让我们通过添加两个捕获组来调试上面的正则表达式:

  ^(.*?)(?机器人\。txt)(。*?)$测试结果:

  我们看到第一个分组不匹配任何内容,而第二个分组匹配整个字符串。我们回过头来分析一下刚才的正则表达式。

  其实当常规引擎解析到A区域的时候,就已经开始向B区域前瞻了。这时发现当A区为空时,匹配成功为——。*最初允许匹配空字符,并且满足了先行条件。A区后面是“2009”字符串,而不是机器人。因此,整个匹配过程成功匹配所有条目。

  在分析了原因之后,我们修改了上面的正则化,将其改为。*?进入前瞻性表达式,如下所示:

  ^(?*?机器人)。*$测试结果:

  推荐教程:java开发入门以上是java使用正则表达式匹配不包含某个规则的字符串的细节。更多请关注其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: