Regex не выдает желаемый результат - PullRequest
0 голосов
/ 20 февраля 2020

Я использую регулярное выражение - [{] {[}] [}] для ввода {{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 парсер здесь.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

Будет лучше преобразовать его в объект, и тогда вы сможете найти все, что вам нужно.

Создать объект DTO

    public class DsmDto{
     private String id;
     private String title;
     private String code;
     private float companyId;
     private boolean enabled;
     private boolean enableAdvanceFilter;
     private boolean deleteAfterScheduledTime;
     private boolean enableDataStoreLog;


     // Getter Methods 

     public String getId() {
      return id;
     }

     public String getTitle() {
      return title;
     }

     public String getCode() {
      return code;
     }

     public float getCompanyId() {
      return companyId;
     }

     public boolean getEnabled() {
      return enabled;
     }

     public boolean getEnableAdvanceFilter() {
      return enableAdvanceFilter;
     }

     public boolean getDeleteAfterScheduledTime() {
      return deleteAfterScheduledTime;
     }

     public boolean getEnableDataStoreLog() {
      return enableDataStoreLog;
     }

     // Setter Methods 

     public void setId(String id) {
      this.id = id;
     }

     public void setTitle(String title) {
      this.title = title;
     }

     public void setCode(String code) {
      this.code = code;
     }

     public void setCompanyId(float companyId) {
      this.companyId = companyId;
     }

     public void setEnabled(boolean enabled) {
      this.enabled = enabled;
     }

     public void setEnableAdvanceFilter(boolean enableAdvanceFilter) {
      this.enableAdvanceFilter = enableAdvanceFilter;
     }

     public void setDeleteAfterScheduledTime(boolean deleteAfterScheduledTime) {
      this.deleteAfterScheduledTime = deleteAfterScheduledTime;
     }

     public void setEnableDataStoreLog(boolean enableDataStoreLog) {
      this.enableDataStoreLog = enableDataStoreLog;
     }
    }

Создать класс преобразователя и метод преобразования

public class DmsConverter{

ObjectMapper mapper = new ObjectMapper();

public static DsmDto jsonToDsm(String json){
    return mapper.readValue(json, DsmDto.class);
}

}

Использование:

DsmDto dsmDto = DsmConverter.jsonToDsm(json);
System.out.println(dsmDto.getId());
0 голосов
/ 20 февраля 2020

Вы неправильно используете группу скороговорок. Попробуйте это:

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));
}

Но я рекомендую использовать другой подход: например, Джексон чтобы преобразовать это JSON в Map<String, Object> и получить необходимые поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...