Regex解析json格式的字符串



我有一个JSON格式的字符串,我正在尝试使用regex解析它。我想解析每个键值对,以便稍后在grafana中使用(正则表达式本身在logstash中使用(。

测试字符串如下所示:

{
"version":"1.1",
"nameId":"test",
"productId":"B2",
"total customers":99,
"full_description":"asdf"
}

我使用的是下面的正则表达式,但似乎如果值是一个数字(没有"(,它会将逗号分组在值中。例如键"0"的组值;总客户";是";99;而不仅仅是";99〃;。

(?i)["'](?<key>[^"]*)["'](?::)["'{[]?([rn]?t+")?(?<value>w(?:s[a-zA-Z0-9_=].?)+w+@(?:(?:w[a-zd-]+w).)+[a-z]{2,10}|true|false|[w+-.$s=-]*)(",[rn])?(?2)?(?J)(?<value>(?&value))?

为了解析作为数字的JSON值,我必须向regex表达式添加什么?

模式[w+-.$s=-]中的这一部分具有范围+-.,而不是与+-.匹配

该范围与ASCII字符小数43-46匹配,其中数字44与不需要的,匹配

由于字符类在末尾已经与-匹配,因此可以省略中间的-

该模式包含一些多余的逃脱和捕获组,看起来有点复杂。只有2个捕获组的更新模式可能看起来像;

(?i)["'](?<key>[^"]*)["']:["'{[]?(?:[rn]?t+")?(?<value>w(?:s[a-zA-Zd_=].?)+w+@(?:w[a-zd-]+w.)+[a-z]{2,10}|true|false|[w+.$s=-]*)(?:",[rn])?(?2)?(?J)(?<value>(?&value))?

Regex演示

相关内容

  • 没有找到相关文章

最新更新