【问题标题】:Regex for matching non empty JSON strings?用于匹配非空 JSON 字符串的正则表达式?
【发布时间】:2012-08-09 20:44:49
【问题描述】:

我有以下正则表达式..

(^\[[.*][[0-9a-zA-Z][0-9a-zA-Z]]*[.*]\])

这意味着只匹配像这样的非空 JSON 编码字符串......

[ { object: HELLO } ]

同时排除“空”JSON 响应,例如...

[ ]

这些响应中可能有也可能没有空格。

我的正则表达式似乎适用于某些情况,即。

[ ] <---- does not match.
[ HELLO ] <---- matches.
[ { HELLO } ] <---- does not match.

我不太关心 JSON 的实际有效性,而是确保[] 中除了空白之外还有其他内容

最好的检查方法是什么?

【问题讨论】:

  • 上下文是什么?为什么不简单地解析 JSON? [ { object: HELLO } ] 不是 JSON 顺便说一句。由于 JSON 包含嵌套结构,因此您需要一个递归正则表达式引擎。
  • 我同意@FelixKling:您应该使用专用的 JSON 解析器。正则表达式不够健壮,而且有很多 JSON 解析器。
  • 你使用什么编程语言?

标签: regex json


【解决方案1】:

您的正则表达式不正确,因为您将[...] 用于分组和字符类。

  • 使用括号构成组:(...)。
  • 字符类使用方括号构成:[...]。

表达式[.*] 是一个字符类。这并不意味着您可能想要的“匹配零个或多个任何字符”。它的意思是“完全匹配一个点或星号”。

修复这些错误后,你的正则表达式也可以简化:

^\[.*[0-9a-zA-Z]+.*\]$

这不验证 JSON 是否正确。它只检查字符串是否满足以下条件:

  • 以[开头。
  • 以]结尾。
  • 至少包含一个 0-9、a-z 或 A-Z 字符。

【讨论】:

  • 字符串[ ] 匹配您的正则表达式。它必须有一个不是[ ] 之间的空格的字符
  • @Skizit:它工作正常。见这里:rubular.com/r/4X2OZnHxEm。你如何测试它?你能发布完整的代码吗?另请注意,“非空格”与“[0-9a-zA-Z]”不同。你要哪个?
【解决方案2】:

为什么不直接检查你是否有你不想要的情况呢?

^\[\s*\]$

应该检查你是否有一个空的 JSON 响应

即

  • 以[开头
  • 它只包含空格(0 个或多个)
  • 以]结尾

【讨论】:

  • 最后一个字符应该是 '$' 而不是 '&'。 '$' 表示“字符串结尾”。 '&' 在正则表达式中没有任何特殊含义。
猜你喜欢
  • 2015-11-16
  • 2018-05-03
  • 2023-03-13
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多