首页 > 编程知识 正文

正则表达式不包含中文,正则表达式不匹配特定字符串

时间:2023-05-03 14:24:23 阅读:143233 作者:2721

测试数据:

例如,上面的简单日志条目希望实现两个目标。

过滤一八天的数据

2、请查找不包含robots.txt字符串的项目。 请过滤Url中包含robots.txt的所有内容。

预见性语法是(! 匹配模式)

首先,让第一个目标——与不以特定字符串开头的条目匹配。

这里为了排除连续的字符串,匹配模式为2009-07-08,非常简单。 实现如下。 ^ (? 2009-07-08(.*? $

在Expresso中,可以看到结果确实过滤了8天的数据。

然后,实现第二个目标——以排除包含特定字符串的条目。

根据我们上面的写法,根据葫芦画葫芦,^.*? (? robots.txt ).*? $

该正则表达式的意思是,不能以任何字符开头,后面跟有robots.txt连续字符串,后面跟有任何字符,字符串也不能结束。

运行测试后,发现以下内容:

没有得到我们想要的效果。 为什么会这样呢? 在上面的正则表达式中添加两个捕获组并尝试调试。 ^((.*? () )? robots.txt () (.*? ($

测试结果:

第一组什么都不匹配,但可以看到第二组匹配整个字符串。 让我们再回去仔细分析一下刚才的正则表达式。

实际上,正则引擎解析为a区域时,已经开始了b区域的预见性工作。 此时,如果a区域为Null,则匹配成功——.*,发现原本就允许匹配空字符,满足了预见性条件。 a区域后面紧跟“2009”字符串,而不是robots。 因此,整个匹配过程成功匹配了所有条目。

分析原因后,修正上述正则, *? 移动到预读表达式时,将出现以下情况: ^ (? *? robots*.*$

测试结果:

推荐教程: java开发入门

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。