【问题标题】:Need Regex that matches the following json [duplicate]需要与以下 json 匹配的正则表达式 [重复]
【发布时间】:2013-12-25 01:10:12
【问题描述】:

我有以下 json,

{"master": "abc", "current": "abc", "total":[{"name":"abc"},{"name":"xyz"}]}

现在我需要使用正则表达式验证上面的json,即我需要确认master值和current值是一样的(在上面的json中master和current都有“abc”作为值)和我不关心json的其余部分

谁能帮我解决这样的正则表达式

【问题讨论】:

  • 这是 json 解析器/验证器的工作,而不是正则表达式
  • 普通正则表达式无法做到这一点。 Json 不能被描述为正则语言,因为正则表达式不区分上下文
  • 我处于只需要一个正则表达式的情况,但从上面的 cmets 看来,这对于正则表达式是不可能的。谢谢。
  • @user1810502 您可以使用正则表达式获取mastercurrent 的值,然后使用其他工具检查它们是否相同
  • @pogopaule 检查这个answer。如果你愿意,我可以为你提供更多。请务必查看the true power of regex :)

标签: regex linux json parsing grep


【解决方案1】:

你可以这样使用:

("master": "([^"]*)")+.*"current": "([^"]*)"

在这里试试:http://regexr.com?37pbn

然后您可以将值提取到变量中并进行比较。但是,如果“master”可能出现在“current”之后,您可能需要单独提取这些值。不过,我建议您使用解析器。

如果您确实使用 RegEx,您可能需要打开不区分大小写等功能。

【讨论】:

  • 根据 www.json.org,{}-enclose 的“对象”是无序的,所以我冒着风险,你的建议是“单独拉出 [ing] 值”需要遵循 - 解析器不应该依赖于“master”在“current”之前,也不应该依赖于“total”、“name”或稍后可能引入的其他标签的任何特定排序。其他边缘情况与引用有关......例如区分“old\”master”和“master”,并在字符串值可能包含 '[' ']' '{' 和/或 '}' 字符时跳过对象和/或数组。这就是为什么 json 解析器更适合于稳健的行为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多