我正在使用正则表达式-[{] {[}] [}]作为输入{{id}}
我期望的输出是id。但是我得到{{id}}。

我的java代码如下:

  String string = "\"{\n" +
                "    \"id\": {{dsm_id}},\n" +
                "    \"title\": \"Automation Test\",\n" +
                "    \"code\": \"aut_test\",\n" +
                "    \"companyId\": 286,\n" +
                "    \"enabled\": true,\n" +
                "    \"enableAdvanceFilter\": false,\n" +
                "    \"deleteAfterScheduledTime\": false,\n" +
                "    \"enableDataStoreLog\": false\n" +
                "}\"";
        String patternString = "[{][{](.*)[}][}]";
        Pattern pattern = Pattern.compile(patternString);
        Matcher matcher = pattern.matcher(string);
        List<String> allMatches = new ArrayList<String>();
        while (matcher.find()) {
            allMatches.add(matcher.group());
        }
        System.out.println(allMatches);


我唯一需要的解决方案是使用正确的正则表达式。我不能在这里使用或不想使用DTO或Json解析器。

最佳答案

您错误地使用了模式组。试试这个:

String patternString = "[{][{](?<id>.*)[}][}]";
// String patternString = "\\{\\{(?<id>[^}]+)}}";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(string);
List<String> allMatches = new ArrayList<>();
while (matcher.find()) {
    allMatches.add(matcher.group("id"));
}


如果您不想使用name group

String patternString = "[{][{](.*)[}][}]";
//String patternString = "\\{\\{([^}]+)}}";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(string);
List<String> allMatches = new ArrayList<>();
while (matcher.find()) {
    allMatches.add(matcher.group(1));
}


但我建议您使用另一种方法:例如Jackson将此JSON转换为Map<String, Object>并检索必填字段。

09-10 09:59
查看更多