RegEx-使用GROK

时间:2019-02-05 12:44:36

标签: regex grok phrase

我正在尝试使用RegEx在两个“标签”之间捕获一些信息。 示例:一些文本和更多文本错误消息:未找到http 404 过程:一些文本一些文本

我需要分析整个字段,找到短语“错误消息:”和“过程:”并捕获它们之间的内容,在本例中为“未找到http 404”。我只需要显示标签之间的文本,而不必显示标签。

我使用RegEx和Grok尝试了很多方法,但尝试均未成功。

有人知道我如何做到这一点吗?

非常感谢!

2 个答案:

答案 0 :(得分:0)

@capture = $text =~ m/(Error message:)(.*?)(Procedures:)/s;
$capture = join '', @capture;
$capture =~ s/<.*?>//g;

只需捕获它,将其保存在数组中,然后使用它做任何您想做的事情...在这里,我将匹配项转换回字符串,因此可以应用另一个正则表达式,该正则表达式删除标签。您当然可以在每个数组的索引上应用这样的替换正则表达式。

希望此代码不包含错误,我没有对其进行编译,如果您使用的语言与perl 5不同,希望您能找到它的替代品。

答案 1 :(得分:0)

正如您还询问了Grok模式一样,我考虑了提交另一个答案。在这种情况下,我的解决方案基于使用规则表达式匹配不相关部分(包括预期标签的结尾或开头)的grok模式。解决方案是:

(?<notImportant1>[A-Za-z ]* Error message:) (?<textBetweenTags>[A-Za-z0-9 ]*) (?<notImportant2>Procedures: [A-Za-z ]*)

它将为您提供以下信息:

  • notImportant1 :一些文本和更多文本错误消息:
  • textBetweenTags :未找到http 404
  • notImportant2 :过程:一些文本,一些文本

在这里,您已将您感兴趣的子字符串提取为“ textBetweenTags”。意识到如果标签之前或之后的文本包含数字或其他符号,则正则表达式应更改。

编辑:顺便说一句,不知道您是否知道该工具,但是可以测试模式here