正则表达式解析 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))?

Regex demo