在业务开发中,我们需要监视错误日志。目前,我们的错误日志格式是,那么我们如何匹配错误日志?
我们可以通过正则表达式实施。
现在,假设我们要在下面实现一个函数:过滤出现的超时问题,并且不匹配此日志,那么我们应该如何意识到它?
由于我们想通过正则表达式过滤日志,因此我们应该对正则表达式中的某些语法有所了解。
匹配输入字符串的启动位置,除非在方括号表达式中使用该符号在Square Bracket表达式中使用符号时,它不接受方括号表达式中字符的字符集。输入字符串。如果设置了regexp对象的多线属性,则它也匹配或匹配。要匹配字符本身。标记sub -expression.sub -expression的开始和结束,可以供将来使用。要匹配这些字符,请使用它。匹配先前的子表达式零或多次。要匹配该字符,请使用它。匹配上一个或多次的sub -expression。要匹配该字符,请使用它。匹配除了更改行以外的任何单个字符。要匹配,请使用它。比赛前面的子表达为零或一次,或指示非磨难的有限字符。要匹配该字符,请使用它。表示两个i之间的选择tems.要匹配,请使用它。该内容的一部分是指对正则表达式的详细说明。
当我们使用零宽度断言的概念时,让我们首先看一下将使用零宽度断言的场景。
有时,我们需要捕获的内容必须是在之前和之后的特定内容,但是当未捕获这些特定内容时,零宽的单词可行。
例如:以下两个字符串:,。我们想找到上一个字符串的字符串。此时,使用零 - 宽度断言。
零宽度的概念就像其名称一样。这是一种零宽度匹配。它匹配的内容不会保存到匹配结果中。最终的匹配结果只是一个位置。
该功能是为指定位置添加有限的条件。它用于指定该位置之前或之后的字符串必须满足有限的条件,以便在常规匹配中进行子表达。
注意:此处提到的子表达不仅是小括号中包含的表达式,而且是正则表达式中的任意匹配单元。
在上面的代码中,正则表达式的语义语义是:遵循匹配后的任何大写字母的字符串,最终匹配结果是,由于零 - 宽度中断与任何字符不匹配,因此知识用于指定该知识当前的位置必须是大写字母。
在上面的代码中,正则表达式的语义语义是:匹配后不遵循任何大写字母的字符串。正则表达式无法匹配任何字符,因为在字符串中,有一个大写字母。
零 - 宽度单词用于在某些内容之前或之后查找事物(但不包括这些内容),也就是说,它们用于指定类似的位置,该位置应用于满足条件(即断言,断言,因此它们也被称为零宽度断言。声明一个真实的事实,并且正则表达式只有在真理是自信的情况下才会继续匹配。
它也称为零宽度来预测断言的预测。它断言它可以匹配出现位置后面的表达式EXP。
也称为零宽度来回顾断言。它断言它可以匹配出现位置前面的表达式EXP。
负零 - 宽度断言如果我们想要的功能是:确保角色不会出现,但您不想匹配他。我该怎么办?这是一开始提到的问题。这是负零宽度主张。
零宽度阴性预测首先断言表达EXP不能在该位置后面匹配。
以同样的方式,由于缺乏匹配,前方不会有匹配,也就是说,零宽度的负面评论和断言。
总而言之,通过上述零宽单词,我们知道,如果您想查询以错误但不包括超时的日志查询,则可以使用以下正则表达式:
让我们逐渐分析这种正则表达:
让我们测试此正则表达式是否可以正常工作。
首先,让我们测试是否可以正常匹配错误日志:如下所示,我们发现它可以正常匹配。
然后,让我们测试可以过滤包含超时的错误日志:如下所示,我们可以发现它尚未匹配此日志,并且该日志被过滤了。这恰好满足了我们的需求。
那么我们可以在GO代码中实现此功能吗?让我们对其进行测试。
运行结果如下:
我们可以看到结果被抛出,错误消息是:。此显示GO不支持零宽度断言。
我们还可以通过文档找到不支持零宽的单词。
在文本匹配re(不支持)之前,在文本不匹配re(不支持)文本匹配后(不支持)文本后(不支持)不匹配RE(不支持)之前(不支持)?REGEXP。
关于REGEXP的功能,其中之一如下:
REGEXP软件包中的引擎,仅在需要非常复杂的图案时才应使用此功能。
REGEXP2是GO的功能性REGEXP引擎。它没有固定的时间保证,例如内置的Regexp软件包,但它允许回顾性,并且与Perl5和.net兼容。Regexp软件包中的RE2引擎可能会更好。仅当需要编写非常复杂的模式或需要与.NET兼容时,才应使用它。
REGEXP和REGEXP2的一部分如下:
然后,让我们根据文档尝试一下。
运行结果如下:
您可以看到Match3正常匹配。测试成功。
从上面,我们可以看到RegeXP2的功能仍然非常强大。如果我们需要实现复杂的正则表达式,建议使用它。
但是我们需要注意的一件事是:那是Regexp2的时间复杂性。我们还可以从中看到他不像官方包装可以保证确定的时间复杂性。因此,当在生产环境中使用时,您必须小心!交叉启动启动