从日志行中查找键值对,可能被引用,可能包含引号
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"]+)
正则表达式详细信息:
(?<key>[^\s=]+)
:匹配1个或多个不是=
和空格的字符,在"key"
组中捕获
=
:匹配文字=
(?<value>
: 开始捕获组"value"
"[^"\]*(?:\.[^"\]*)*"
:匹配带引号的字符串,忽略 "..."
中的所有转义字符
|
: 或
[^\s"]+
:匹配1个或多个不是=
和空格 的字符
)
: 结束捕获组"value"
正在寻找一个正则表达式来捕获日志行中所有引用的键值对(准确地说是 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"]+)
正则表达式详细信息:
(?<key>[^\s=]+)
:匹配1个或多个不是=
和空格的字符,在"key"
组中捕获
=
:匹配文字=
(?<value>
: 开始捕获组"value"
"[^"\]*(?:\.[^"\]*)*"
:匹配带引号的字符串,忽略"..."
中的所有转义字符
|
: 或[^\s"]+
:匹配1个或多个不是=
和空格 的字符
)
: 结束捕获组"value"