java - 使用正则表达式从 json 获取字段

标签 java regex string

我有以下 json 文档:

{  
   "videoUrl":"",
   "available":"true",
   "movie":{  
      "videoUrl":"http..."
   },
   "account":{  
      "videoUrl":"http...",
      "login":"",
      "password":""
   }
}   

在此 json 中,我有一个名为 videoUrl 的属性,我想获取第一个非空 videoUrl

我的正则表达式:

("videoUrl":)("http.+")

但是这个正则表达式匹配以下字符串

    "videoUrl" :"http..."},
"account" : {"videoUrl" : "http...","login" : "","password" : ""

我编写正则表达式的方法是什么,它将找到第一个非空 videoUrl 及其值

(结果应为"videoUrl":"http...")

最佳答案

在正则表达式末尾添加 (?!,) ,这将使正则表达式停在 , 处而不捕获它:

public static void main(String[] args) {
    String input = "{  \n" +
            "   \"videoUrl\":\"\",\n" +
            "   \"available\":\"true\",\n" +
            "   \"movie\":{  \n" +
            "      \"videoUrl\":\"http...\"\n" +
            "   },\n" +
            "   \"account\":{  \n" +
            "      \"videoUrl\":\"http...\",\n" +
            "      \"login\":\"\",\n" +
            "      \"password\":\"\"\n" +
            "   }\n" +
            "} ";

    Pattern pattern = Pattern.compile("(\"videoUrl\":)(\"http.+\")(?!,)");
    Matcher matcher = pattern.matcher(input);
    while (matcher.find()) {
        System.out.println(matcher.group());  // "videoUrl":"http..."
    }
}

关于java - 使用正则表达式从 json 获取字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50486394/

相关文章:

javascript - 需要一个正则表达式来查找不被加号包围的字符

java - 匹配字符串中第一次出现的分号,前提是前面没有 '--'

C++11 和 C++03 对 std::string 的小字符串优化的支持不同?

regex - grep 查找字符串,后跟匹配的两个或三个字符

java - 尽管没有进行任何更改,简单的应用程序还是崩溃了

java - HSQL在jdbc create array语句中引用自定义类型

python - 在 re.sub 替换模式中处理对捕获组的反向引用

java - 如何将 ContentProvider 与在线数据库一起使用

java - 通过java从.jar文件内部访问类

jquery - 获取当前的 jQuery 选择器字符串?