Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式-使用GROK提取短语之间的文本_Regex_Grok_Phrase - Fatal编程技术网

Regex 正则表达式-使用GROK提取短语之间的文本

Regex 正则表达式-使用GROK提取短语之间的文本,regex,grok,phrase,Regex,Grok,Phrase,我正在尝试使用正则表达式在两个“标记”之间捕获一些信息。 示例:一些文本和更多文本错误消息:http 404未找到过程:一些文本一些文本 我需要的是分析整个字段,找到短语“Error message:”和“Procedures:”并捕获它们之间的内容,在本例中为“http404notfound”。我只需要显示标签之间的文本,不需要显示标签 我用RegEx和Grok做了很多尝试,但都没有成功 有人知道我怎样才能做到这一点吗 非常感谢 @capture=$text=~m/(错误消息:)(.*)(过程

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

我需要的是分析整个字段,找到短语“Error message:”和“Procedures:”并捕获它们之间的内容,在本例中为“http404notfound”。我只需要显示标签之间的文本,不需要显示标签

我用RegEx和Grok做了很多尝试,但都没有成功

有人知道我怎样才能做到这一点吗

非常感谢

@capture=$text=~m/(错误消息:)(.*)(过程:)/s;
@capture = $text =~ m/(Error message:)(.*?)(Procedures:)/s;
$capture = join '', @capture;
$capture =~ s/<.*?>//g;
$capture=加入“”,@capture; $capture=~s///g;
只要捕获它,将它保存在数组中,然后用它做任何你想做的事情。。。在这里,我将匹配项转换回字符串,以便应用另一个正则表达式,从而删除标记。当然,您可以对每个数组的索引应用这样的替换正则表达式

希望这段代码不包含错误,我没有编译它,如果您使用的是与perl 5不同的语言,希望您能找到它的替代方案。

@capture=$text=~m/(错误消息:)(.*)(过程:)/s;
$capture=加入“”,@capture;
$capture=~s///g;
只要捕获它,将它保存在数组中,然后用它做任何你想做的事情。。。在这里,我将匹配项转换回字符串,以便应用另一个正则表达式,从而删除标记。当然,您可以对每个数组的索引应用这样的替换正则表达式


希望这段代码不包含错误,我没有编译它,如果您使用的是与perl 5不同的语言,希望您能找到它的替代方案。

由于您还要求提供Grok模式,我考虑提交另一个答案。在本例中,我的解决方案基于grok模式,使用正则表达式匹配不相关的部分,包括末尾或开头的预期标记。解决办法是:

(?<notImportant1>[A-Za-z ]* Error message:) (?<textBetweenTags>[A-Za-z0-9 ]*) (?<notImportant2>Procedures: [A-Za-z ]*)
(?[A-Za-z]*错误消息:)(?[A-Za-z0-9]*)(?程序:[A-Za-z]*)
它将为您提供如下服务:

  • 不重要1:一些文本和更多文本错误消息:
  • textBetweenTags:未找到http 404
  • 不重要2:程序:一些文本一些文本
在这里,您已将感兴趣的子字符串提取为“textBetweenTags”。要意识到,如果标签前后的文本包含数字或其他符号,正则表达式应该改变


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

由于您还要求提供Grok模式,我考虑提交另一个答案。在本例中,我的解决方案基于grok模式,使用正则表达式匹配不相关的部分,包括末尾或开头的预期标记。解决办法是:

(?<notImportant1>[A-Za-z ]* Error message:) (?<textBetweenTags>[A-Za-z0-9 ]*) (?<notImportant2>Procedures: [A-Za-z ]*)
(?[A-Za-z]*错误消息:)(?[A-Za-z0-9]*)(?程序:[A-Za-z]*)
它将为您提供如下服务:

  • 不重要1:一些文本和更多文本错误消息:
  • textBetweenTags:未找到http 404
  • 不重要2:程序:一些文本一些文本
在这里,您已将感兴趣的子字符串提取为“textBetweenTags”。要意识到,如果标签前后的文本包含数字或其他符号,正则表达式应该改变

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