从日志行中查找键值对,可能被引用,可能包含引号

Finding key-value pairs from log line, may be quoted, may contain quotes

正在寻找一个正则表达式来捕获日志行中所有引用的键值对(准确地说是 exim)。但是,值也可以包含引号

尝试了其他 SO 问题中的多个示例(例如 Regular expression to match key-value pairs where value is in quotes or apostrophes),所有示例都在遇到内部引号字符后立即失败

测试数据,所有有效示例:

A="value" F="something here" T="This is the value"
F="something \"here\"" T="The value's here" X=ignore
F="something's here" T="He said \"This is also the value\""

您可以使用此正则表达式来匹配所有单独的键值对:

(?<key>[^\s=]+)=(?<value>"[^"\]*(?:\.[^"\]*)*"|[^\s"]+)

RegEx Demo

正则表达式详细信息:

  • (?<key>[^\s=]+):匹配1个或多个不是=和空格的字符,在"key"
  • 组中捕获
  • =:匹配文字=
  • (?<value>: 开始捕获组"value"
    • "[^"\]*(?:\.[^"\]*)*":匹配带引号的字符串,忽略 "..."
    • 中的所有转义字符
    • |: 或
    • [^\s"]+:匹配1个或多个不是=和空格
    • 的字符
  • ): 结束捕获组"value"