У меня есть этот код, и я хочу найти 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));
}
Ваш неверный номер. Первая часть: frank.*
Соответствует всем, а затем возвращается, пока остальная часть матча не завершится успешно. Попробуйте это вместо этого:
String rgx = "frank.*? ([0-9]*) frank";
?
после того, как квантификатор сделает его неохотным, сопоставляя несколько символов, сколько необходимо для остальной части шаблона. Конечный .*
Также вызывает проблемы (как указывал nhahtdh
в комментарии).
Ваше регулярное выражение слишком жадно. Сделайте это не жадным.
String rgx = "frank.*? ([0-9]+) frank";
frank.*? ([0-9]*) frank
, иначе.*
Съест все.