正则表达式解析 json 格式的字符串
Regex to parse json formatted string
我有一个 JSON 格式的字符串,我正在尝试使用正则表达式对其进行解析。我想解析每个键值对以供以后在 grafana 中使用(正则表达式本身在 logstash 中使用)。
测试字符串如下所示:
{
"version":"1.1",
"nameId":"test",
"productId":"B2",
"total customers":99,
"full_description":"asdf"
}
我正在使用以下正则表达式,但似乎如果值是数字(不带“”),它会将逗号分组到值中。例如,键“total customers”的组值为“99”,而不仅仅是“99”。
(?i)["'](?<key>[^"]*)["'](?:\:)["'\{\[]?([\r\n]?\t+\")?(?<value>\w(?:\s[a-zA-Z0-9_=]\.?)+\w+@(?:(?:\w[a-z\d\-]+\w)\.)+[a-z]{2,10}|true|false|[\w+-.$\s=-]*)(",[\r\n])?(?2)?(?J)(?<value>(?&value))?
我必须在正则表达式中添加什么才能解析 JSON-值,即数字?
模式 [\w+-.$\s=-]
中的这部分有一个范围 +-.
而不是匹配 +
-
或 .
范围匹配 ASCII 字符小数数字 43-46,其中数字 44 匹配不需要的 ,
由于字符class已经匹配到末尾的-
,所以可以省略中间的-
。
该模式包含一些多余的转义和捕获组,看起来有点复杂。只有 2 个捕获组的更新模式看起来像;
(?i)["'](?<key>[^"]*)["']:["'{\[]?(?:[\r\n]?\t+")?(?<value>\w(?:\s[a-zA-Z\d_=]\.?)+\w+@(?:\w[a-z\d-]+\w\.)+[a-z]{2,10}|true|false|[\w+.$\s=-]*)(?:",[\r\n])?(?2)?(?J)(?<value>(?&value))?
我有一个 JSON 格式的字符串,我正在尝试使用正则表达式对其进行解析。我想解析每个键值对以供以后在 grafana 中使用(正则表达式本身在 logstash 中使用)。
测试字符串如下所示:
{
"version":"1.1",
"nameId":"test",
"productId":"B2",
"total customers":99,
"full_description":"asdf"
}
我正在使用以下正则表达式,但似乎如果值是数字(不带“”),它会将逗号分组到值中。例如,键“total customers”的组值为“99”,而不仅仅是“99”。
(?i)["'](?<key>[^"]*)["'](?:\:)["'\{\[]?([\r\n]?\t+\")?(?<value>\w(?:\s[a-zA-Z0-9_=]\.?)+\w+@(?:(?:\w[a-z\d\-]+\w)\.)+[a-z]{2,10}|true|false|[\w+-.$\s=-]*)(",[\r\n])?(?2)?(?J)(?<value>(?&value))?
我必须在正则表达式中添加什么才能解析 JSON-值,即数字?
模式 [\w+-.$\s=-]
中的这部分有一个范围 +-.
而不是匹配 +
-
或 .
范围匹配 ASCII 字符小数数字 43-46,其中数字 44 匹配不需要的 ,
由于字符class已经匹配到末尾的-
,所以可以省略中间的-
。
该模式包含一些多余的转义和捕获组,看起来有点复杂。只有 2 个捕获组的更新模式看起来像;
(?i)["'](?<key>[^"]*)["']:["'{\[]?(?:[\r\n]?\t+")?(?<value>\w(?:\s[a-zA-Z\d_=]\.?)+\w+@(?:\w[a-z\d-]+\w\.)+[a-z]{2,10}|true|false|[\w+.$\s=-]*)(?:",[\r\n])?(?2)?(?J)(?<value>(?&value))?