我正在使用正则表达式-[{] {[}] [}]作为输入{{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>
并检索必填字段。