regex解析堆栈跟踪的第一行
下面是示例文本 4个具有不同时间戳(此处未提及时间戳)的不同stacktrace事件(EROR事件)。 前两个事件只是单行,但后两个错误事件是多行my regex (?PERROR\s-\s[a-zA-Z0-9+\s.\:()\,-\=>\]+) 当前匹配所有内容,即两个单行事件和两个多行事件(所有行) 我想要的结果如下,每个事件只有一行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
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-
匹配任何字符(换行符除外)零次或多次*
我认为这是因为您的匹配空间中有\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]*$))