Java совпадение не может найти последнюю группу - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь регулярное выражение после долгого времени. Я не уверен, если проблема в регулярном выражении или логиках c.

String test = "project/components/content;contentLabel|contentDec";
String regex = "(([A-Za-z0-9-/]*);([A-Za-z0-9]*))";

Map<Integer, String> matchingGroups = new HashMap<>();

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(test);
//System.out.println("Input: " + test + "\n");
//System.out.println("Regex: " + regex + "\n");
//System.out.println("Matcher Count: " + matcher.groupCount() + "\n");
if (matcher != null && matcher.find()) {
    for (int i = 0; i < matcher.groupCount(); i++) {
         System.out.println(i + " ->  " + matcher.group(i) + "\n");
    }
} 

Я ожидал, что выше, чтобы дать мне вывод, как показано ниже:

0 ->  project/components/content;contentLabel|contentDec
1 ->  project/components/content
2 ->  contentLabel|contentDec

Но при запуске кода извлечение группы отключено.

Любая помощь будет очень признательна.

Спасибо!

1 Ответ

1 голос
/ 27 марта 2020

У вас есть несколько проблем:

  1. Вам не хватает | в вашем втором классе персонажей.
  2. У вас есть ненужная группа захвата вокруг всего регулярного выражения.
  3. При выводе групп необходимо использовать <= matcher.groupCount(), поскольку matcher.group(0) зарезервировано для всего матча, поэтому ваши группы захвата находятся в group(1) и group(2).

Это будет работать:

String test = "project/components/content;contentLabel|contentDec";
String regex = "([A-Za-z0-9-/]*);([A-Za-z0-9|]*)";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(test);
if (matcher != null && matcher.find()) {
    for (int i = 0; i <= matcher.groupCount(); i++) {
         System.out.println(i + " ->  " + matcher.group(i) + "\n");
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...