Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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解析堆栈跟踪的第一行_Regex_Splunk - Fatal编程技术网

regex解析堆栈跟踪的第一行

regex解析堆栈跟踪的第一行,regex,splunk,Regex,Splunk,下面是示例文本 4个具有不同时间戳(此处未提及时间戳)的不同stacktrace事件(EROR事件)。 前两个事件只是单行,但后两个错误事件是多行my regex (?PERROR\s-\s[a-zA-Z0-9+\s.\:()\,-\=>\]+) 当前匹配所有内容,即两个单行事件和两个多行事件(所有行) 我想要的结果如下,每个事件只有一行 ERROR - An Error has occured for com.marsh.framework.core.exception.MarshExcept

下面是示例文本

4个具有不同时间戳(此处未提及时间戳)的不同stacktrace事件(EROR事件)。 前两个事件只是单行,但后两个错误事件是多行my regex

(?PERROR\s-\s[a-zA-Z0-9+\s.\:()\,-\=>\]+)

当前匹配所有内容,即两个单行事件和两个多行事件(所有行)

我想要的结果如下,每个事件只有一行

ERROR - An Error has occured for com.marsh.framework.core.exception.MarshException: Your session has timed out.
ERROR - An Error has occured for com.marsh.framework.core.exception.MarshException: Record has been modified since last retrieved - Resubmit transaction
ERROR - handleException():com.marsh.framework.core.exception.MarshException: Your session has timed out.
ERROR - handleException():com.marsh.framework.core.exception.MarshException: Record has been modified since last retrieved - Resubmit transaction
有没有关于改进我的正则表达式以匹配上述结果的帮助

编辑:

使用当前正则表达式(?PERROR\s-\s[^\n\r]+),它将在第行下面匹配

ERROR - handleException():com.marsh.framework.core.exception.MarshException: Remote Exception while updating CSA Details for CSA id 1463755 and Account id 11242 
我想比赛

ERROR - handleException():com.marsh.framework.core.exception.MarshException: Remote Exception while updating CSA Details for CSA id 
i、 e到没有数字,所以我使用了(?peror\s-\s[^\n\r]+?(?=[0-9]),但它失去了之前的所有匹配,只匹配了第行上方的匹配

编辑:


您没有指定所使用的正则表达式引擎。
在(与perl兼容的引擎以及python引擎)上,您的正则表达式根本不匹配

使用:

没有多行标志

它将一直匹配到这条线的尽头

编辑:

上述正则表达式是指:

  • ERROR-
    按字面意思匹配字符
    ERROR-
    (区分大小写)

  • *
    匹配任何字符(换行符除外)零次或多次


您可以尝试在“ERROR-”片段之后显式匹配非换行符(未测试):


我认为这是因为您的匹配空间中有\s。

您的正则表达式模式包含
\s
,它匹配所有空白字符,包括
\n
和/或
\r
,这会导致您的问题

将字符集
[…]
的内容替换为
^\n\r
,以匹配该行中的任何字符,但不允许超出行尾:

(?PERROR\s-\s[^\n\r]+)

编辑: 根据OP的更新和chat中讨论的其他事实,建议使用以下正则表达式模式:

(?PERROR\s-\s[^\n\r]*?(?=[^\S\n\r]*\d{7}|[^\S\n\r]*[\n\r]|[^\S\n\r]*$))

这个也可以,但看起来很简单。你能给我解释一下上面正则表达式的含义吗?你能告诉我如何在特定的单词或句点/句号或空格处结束匹配吗。e、 在上面的示例中,文本匹配应该在“at”字之前结束。请参阅我对regex含义的编辑。要匹配到“at”,您可以使用这一个
错误-(\w|(?!at))*
,请在现场查看,非常感谢Teejay:)我已经编辑了这个问题。关于这方面的任何帮助。感谢您的回答,但如果没有character setlet us@Pradi,它将无法工作-我已更新了上面的答案。请删除上面所有的评论,除了“让我们在聊天中继续讨论”的评论,所以这篇文章是干净的。你可以考虑删除其他评论中的其他评论,所以这个问题对其他访问者来说是干净的。我稍后会删除此评论。非常感谢。
ERROR - .*
(?PERROR\s-\s[^\n]+)
(?PERROR\s-\s[^\n\r]+)
(?PERROR\s-\s[^\n\r]*?(?=[^\S\n\r]*\d{7}|[^\S\n\r]*[\n\r]|[^\S\n\r]*$))