2017-04-25 90 views
-4

我有一个要求是在数据本身的JSON数据中找到双引号。在字符串中查找文本

例如:{“关键”:“值”,“密钥1”,“瓦尔” UE1“}

现在瓦尔双引号” UE1需要检索,而不是其他的双引号。

任何想法如何实现这一目标?

+0

您的JSON似乎对我无效。如果可以的话,要么逃脱这个丑陋的“,要么改为使用单引号。 – Antoine

回答

-1

用于从双引号中提取数据的正则表达式为(?<=")[^"]*(?="))。括号表示您可以用\1$1提取的第一个捕获组。

但是,对于解析JSON(以及通常的解析标准),建议使用库;它将比只是一个不包含边缘情况的正则表达式更具可读性,可理解性和安全性(并不是说这里会有一些,而是将其作为一般建议)

例如,如果您使用Java,Gson是一个很好的解析和生成JSON库;如果您使用JavaScript,只需使用内置的JSON对象。如果你不使用这些语言中的任何一种,我肯定还有其他很好的库。

希望这有助于

0

如何: \"([^(?:\"[,}])]*\"[^(?:\"[,}])]*)\"[,}]

这个正则表达式在一个冒号后跟一个空格和一个双引号,另一个双引号后跟一个comman或者关闭大括号。这些文本之间的文本必须包含*,至少一个引号和一些*。

* something表示任何内容(包括空字符串),不包含引号,后跟逗号或关闭大括号,因为这会结束值。

应用于您的示例(更正以逗号替换逗号),它返回Val"ue1

String json = "{\"Key\": \"Value\", \"Key1\": \"Val\"ue1\"}"; 

Matcher m = Pattern.compile(": \"([^(?:\"[,}])]*\"[^(?:\"[,}])]*)\"[,}]").matcher(json); 

while (m.find()) 
{ 
    System.out.println(m.group(1)); 
}