在字符串中查找文本

时间:2017-04-25 07:17:26

标签: regex regex-group

我需要在JSON数据中找到双引号,它们是数据本身的一部分。

例如:{“Key”:“Value”,“Key1”,“Val”ue1“}

现在需要检索Val“ue1中的双引号而不是其他双引号。

知道如何实现这个目标吗?

2 个答案:

答案 0 :(得分:0)

: \"([^(?:\"[,}])]*\"[^(?:\"[,}])]*)\"[,}]怎么样?

此正则表达式在冒号后面跟一个空格和一个双引号以及另一个双引号后跟一个逗号或结束大括号之间查找文本。它们之间的文本必须由*,至少一个引用和某些东西组成*。

*某事意味着任何东西(包括空字符串)不包含引号后跟逗号或结束花括号,因为这会结束该值。

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

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

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

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

答案 1 :(得分:-1)

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

但是,对于解析JSON(以及一般的解析标准),建议使用库;它比可能不包括边缘情况的正则表达式更具可读性,可理解性和安全性(不是说这里会有一些,但总的来说这是一个建议)

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

希望这有帮助