Как использовать группы в регулярных выражениях в Java?

1

У меня есть этот код, и я хочу найти 1234 и 4321, но в настоящее время я могу получить только 4321. Как я могу исправить эту проблему?

String a = "frankabc123 1234 frankabc frankabc123 4321 frankabc";
String rgx = "frank.* ([0-9]*) frank.*";
Pattern patternObject = Pattern.compile(rgx);
Matcher matcherObject = patternObject.matcher(a);
while (matcherObject.find()) {
    System.out.println(matcherObject.group(1));
}
  • 1
    Ваше регулярное выражение должно быть frank.*? ([0-9]*) frank , иначе .* Съест все.
  • 0
    Узнайте о ленивых против жадных квантификаторов.
Показать ещё 3 комментария
Теги:

2 ответа

1
Лучший ответ

Ваш неверный номер. Первая часть: frank.* Соответствует всем, а затем возвращается, пока остальная часть матча не завершится успешно. Попробуйте это вместо этого:

String rgx = "frank.*? ([0-9]*) frank";

? после того, как квантификатор сделает его неохотным, сопоставляя несколько символов, сколько необходимо для остальной части шаблона. Конечный .* Также вызывает проблемы (как указывал nhahtdh в комментарии).

  • 0
    @nhahtdh - Хороший вопрос. Сейчас исправлено.
2

Ваше регулярное выражение слишком жадно. Сделайте это не жадным.

String rgx = "frank.*? ([0-9]+) frank";

Ещё вопросы

Сообщество Overcoder
Наверх
Меню