数码资讯
使用正则表达式查找不包含特定字符串的条目。
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
日志分析通常需要处理数以千计的日志条目。为了在大量的数据中找到特定的模式数据,常常需要编写许多复杂的正则表达式。例如,日志文件中不包含特定字符串的条目,查找不以特定字符串开头的项,等等。
使用负的前瞻性
在一个正则表达式(前瞻)和向后(追溯)的概念,这两个术语是正则匹配引擎的行为非常生动的描述。需要注意的是,前面和后面的正则表达式是从前面一点不同与我们一般的理解回来。在一个文本,我们一般利用文本开始的方向为前,正文和结尾叫回来。但对于正则表达式引擎,因为它是从文本分析出发,尾头(可以通过定期的选项控制分辨率的方向),因此文本的尾部方向,称为前,因为这个时候,也没有去正规的机体,但文本是头直接因为发动机的正常位置是这样的,如下图所示:
所谓的向前看,在正则表达式匹配一个字符,不预解析文本看,看是不是符合/不符合匹配模式,和顾,文本是一个规则引擎都有,看是不是符合/不符合模式匹配。我们也被称为肯定的匹配负匹配,符合和不符合特定模式匹配。
高级正则表达式引擎一般支持支持和前瞻性,而不是非常广泛,所以在这里我们使用负透视来实现我们的需求。
实现
测试数据:
复制代码代码如下所示:
2009-07-07 04:38:44 127.0.0.1得到 / robots.txt
2009-07-07 04:38:44 127.0.0.1得到 /职位/ robotfile.txt
2009-07-08 04:38:44 / 127.0.0.1得到
例如,上面简单的日志条目,我们想实现两个目标:
1。过滤掉数字8
2。发现不包含robots.txt字符串的项(只要robots.txt是过滤掉在URL)。
未来的语法是:
(!匹配模式)我们首先实现第一个目标匹配项,而不是从一个特定的字符串开始。
在这里,我们要排除一个连续的字符串的字符串,所以匹配模式很简单,就是2009-07-08.the实施如下:
复制代码代码如下所示:
* ^美元(2009-07-08!)
咖啡,我们可以看到,这样做的结果筛选出8号。
接下来,让我们实现包含特定字符串的第二个目标-排除条目。
正如我们写的那样,我画了葫芦。
复制代码代码如下所示:
*
这条规则进行了白话:开始与任何字符,那么不遵循robots.txt连续字符串,然后遵循任何字符串。
运行测试,结果如下:
它不能达到我们想要的效果,为什么呢让我们用两个捕获组调试上面的正则表达式:
复制代码代码如下所示:
(*)(机器人!)(*)。
测试结果:
我们看到第一组没有匹配任何东西,第二组匹配整个字符串。回顾并分析正则表达式。事实上,当常规引擎解析到一个区域时,它已经开始执行B区域的正向工作。最初,允许null条件,并满足预期的区域,其次是2009个字符串,而不是机器人,所以整个匹配过程成功地匹配所有条目。
修改后规则性的原因分析。查看表达式如下:
复制代码代码如下所示:
**(*机器人!)
测试结果:
完成
不包含PHP中特定字符串的常规实现的实现
preg_match( / ^((!ABC);
完整的代码示例
复制代码代码如下所示:
$str =dfadfadf765577abc55fd ;
pattern_url美元= / ^((!ABC)。* $ IS };
如果(preg_match($ pattern_url,$str))
{
不含abc!;
}
其他的
{
包含ABC!;
}
结果是:含有ABC的false!
同时,它包含字符串ABC,并且不包含字符串某某的正则表达式:
(preg_match /(ABC){ ^((!XYZ);
该方法是有效的,我使用的方法如下:
(())| 。)不包含字符串。
但最后发现使用这种方法,效率很低,在很短的文本(匹配的十几个,正则表达式相同的部分或达数十次)可以使用,但当用于分析或更需要补种,时间不应被使用,通过其他方法考虑替代(如:第一,常规解析出来的文本样式然后验证一段文字的存在),对文本段的正则表达式,包括特定字符串不是很有效。
使用负的前瞻性
在一个正则表达式(前瞻)和向后(追溯)的概念,这两个术语是正则匹配引擎的行为非常生动的描述。需要注意的是,前面和后面的正则表达式是从前面一点不同与我们一般的理解回来。在一个文本,我们一般利用文本开始的方向为前,正文和结尾叫回来。但对于正则表达式引擎,因为它是从文本分析出发,尾头(可以通过定期的选项控制分辨率的方向),因此文本的尾部方向,称为前,因为这个时候,也没有去正规的机体,但文本是头直接因为发动机的正常位置是这样的,如下图所示:
所谓的向前看,在正则表达式匹配一个字符,不预解析文本看,看是不是符合/不符合匹配模式,和顾,文本是一个规则引擎都有,看是不是符合/不符合模式匹配。我们也被称为肯定的匹配负匹配,符合和不符合特定模式匹配。
高级正则表达式引擎一般支持支持和前瞻性,而不是非常广泛,所以在这里我们使用负透视来实现我们的需求。
实现
测试数据:
复制代码代码如下所示:
2009-07-07 04:38:44 127.0.0.1得到 / robots.txt
2009-07-07 04:38:44 127.0.0.1得到 /职位/ robotfile.txt
2009-07-08 04:38:44 / 127.0.0.1得到
例如,上面简单的日志条目,我们想实现两个目标:
1。过滤掉数字8
2。发现不包含robots.txt字符串的项(只要robots.txt是过滤掉在URL)。
未来的语法是:
(!匹配模式)我们首先实现第一个目标匹配项,而不是从一个特定的字符串开始。
在这里,我们要排除一个连续的字符串的字符串,所以匹配模式很简单,就是2009-07-08.the实施如下:
复制代码代码如下所示:
* ^美元(2009-07-08!)
咖啡,我们可以看到,这样做的结果筛选出8号。
接下来,让我们实现包含特定字符串的第二个目标-排除条目。
正如我们写的那样,我画了葫芦。
复制代码代码如下所示:
*
这条规则进行了白话:开始与任何字符,那么不遵循robots.txt连续字符串,然后遵循任何字符串。
运行测试,结果如下:
它不能达到我们想要的效果,为什么呢让我们用两个捕获组调试上面的正则表达式:
复制代码代码如下所示:
(*)(机器人!)(*)。
测试结果:
我们看到第一组没有匹配任何东西,第二组匹配整个字符串。回顾并分析正则表达式。事实上,当常规引擎解析到一个区域时,它已经开始执行B区域的正向工作。最初,允许null条件,并满足预期的区域,其次是2009个字符串,而不是机器人,所以整个匹配过程成功地匹配所有条目。
修改后规则性的原因分析。查看表达式如下:
复制代码代码如下所示:
**(*机器人!)
测试结果:
完成
不包含PHP中特定字符串的常规实现的实现
preg_match( / ^((!ABC);
完整的代码示例
复制代码代码如下所示:
$str =dfadfadf765577abc55fd ;
pattern_url美元= / ^((!ABC)。* $ IS };
如果(preg_match($ pattern_url,$str))
{
不含abc!;
}
其他的
{
包含ABC!;
}
结果是:含有ABC的false!
同时,它包含字符串ABC,并且不包含字符串某某的正则表达式:
(preg_match /(ABC){ ^((!XYZ);
该方法是有效的,我使用的方法如下:
(())| 。)不包含字符串。
但最后发现使用这种方法,效率很低,在很短的文本(匹配的十几个,正则表达式相同的部分或达数十次)可以使用,但当用于分析或更需要补种,时间不应被使用,通过其他方法考虑替代(如:第一,常规解析出来的文本样式然后验证一段文字的存在),对文本段的正则表达式,包括特定字符串不是很有效。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。