使用双引号组合在正则表达式中捕获数据



首先 - 我已经做了一些正则表达式(无论如何都不是专家(,但这让我感到困惑。

正则表达式风味是 PCRE (PHP(

我正在尝试从 Splunk 事件中包含的某些字段中获取值。具体而言,来自 Exchange 的收件箱规则事件。

问题是这些值被封装在引号("(中。 因此,没有值的"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中捕获 这些是我正在使用的数据示例:

  1. from=" exceptifFrom=" hasAttachment="false" - 期望的结果= 或 ">
  2. From="即将发生的事件"
  3. 除了IfFrom=" - 期望的结果=即将发生的事件
  4. 发件人="史密斯,约翰" [SMTP:johnsmith@example.com] - 期望的结果=史密斯,约翰
  5. from=">
  6. "systems"[[EX:/O=/OU=******/cn=Recipients/cn=******]" - 期望的结果=系统

提前感谢!

你可以试试这个正则表达式:

/(?<=From=""?)(?: |[^"]+)/g

它首先回顾,确保开始时有"From=",然后检查是否有空格或带引号的字符串并匹配。 如果双引号后有一个空格,则返回空匹配项,否则返回引号之间的值。编辑

试试这个,我忘记了'?' 量词:

b(?:From=""?(?: |([^"]+)))b

此正则表达式不使用回溯,而是在Group 1中得到结果。

它首先将"From=""与一个或两个引号匹配,后跟一个空格或任何数量的字符,而不是引号,抓住组 1 中的引号值。

相关内容

  • 没有找到相关文章

最新更新