首先,我做了一些正则表达式(无论如何都不是专家),但这让我很沮丧。
regex风味为pcre(php)
我正在尝试从Splunk事件中包含的某些字段中获取值。具体来说,来自交换的收件箱规则事件。
捕获到的是将值封装在quotes(“)中。因此,一个没有值的“ From”字段看起来像:
From="". One with an actual value would look like From=""Smith, John" [SMTP:johnsmith@example.com] or From="Microsoft At Home" or From=""Systems"[[EX:/O=<organization>/OU=******/cn=Recipients/cn=******]".
事件中的下一个字段是ExceptFrom =“”。
我有一个正则表达式模式:
`(?:\bFrom=(?:")(?:"|(?:))(?P<From_fixed>((.+?))|((.+?)))(?:"))`
这种类型的作品,但是有很多问题,我稍后必须在此过程中过滤掉。另外,当数据看起来像From =“”时,它将捕获ExceptFrom =“”的下一个字段。
您能帮我找出一个正则表达式吗,如果有双引号,则得到内部引号之间的值;如果有单引号,则得到引号之间的值;如果只有一组引号,则不返回值双引号(“”)。
最后一个是一个不错的选择,因为我以后可以忽略它,但这会使数据看起来更好。
这些应捕获在命名组From_fixed中 这些是我正在使用的数据的示例:
谢谢!
答案 0 :(得分:1)
您可以尝试以下正则表达式:
/(?<=From=\"\"?)(?: |[^"]+)/g
首先回头,确保开始处有“ From =“”,然后检查是否有空格或带引号的字符串并将其匹配。 如果双引号后有空格,则返回空匹配项,否则返回引号之间的值。 编辑:
相反,我忘记了“ ?
”这个量词:
\b(?:From=""?(?: |([^"]+)))\b
此正则表达式不使用回溯,而是在Group 1
中得到结果。
首先将“ From="
”与一两个引号匹配,然后将一个空格或任意数量的字符(而不是引号)匹配起来,将组1中的引号值进行匹配。