寻找一个正则表达式来从日志行(准确地说是exim(捕获所有带引号的键值对。但是,该值也可以包含引号
尝试了其他 SO 问题的多个示例(例如,正则表达式以匹配值在引号或撇号中的键值对(,一旦它们点击内部引号字符,所有示例都失败
了测试数据,所有有效示例:
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"