Как вывести на экран все найденные совпадения по конкретной группе,а не только самое последнее?

 
 
 
Сообщения:45
Вот у меня регулярное выражение:
Pattern pat = Pattern.compile("((abctorzevitamink.)*)sasha");
Matcher mat = pat.matcher("abctorzevitaminkiabctorzevitaminkaabctorzevitaminkeabctorzevitaminkosasha");
while ( mat.find() ) {
	System.out.println( mat.group(2) );
}

Выводит только последнее совпадение:
abctorzevitaminko

А мне надо получить все. Как быть? Помогите плз.

hi there
Изменен:14 апр 2020 09:34
 
 
Сообщения:256
Pattern pat = Pattern.compile("(abctorzevitamink.)");
Matcher mat = pat.matcher("abctorzevitaminkiabctorzevitaminkaabctorzevitaminkeabctorzevitaminkosasha");
while (mat.find()) {
    System.out.println(mat.group(1));
}
 
 
Сообщения:45
axwer:
Pattern pat = Pattern.compile("(abctorzevitamink.)");
Matcher mat = pat.matcher("abctorzevitaminkiabctorzevitaminkaabctorzevitaminkeabctorzevitaminkosasha");
while (mat.find()) {
    System.out.println(mat.group(1));
}

оно так выводит всё сразу,а мне надо каждое совпадение отдельно,с новой строки

hi there
 
 
Сообщения:256
У меня вывело вот так:
abctorzevitaminki
abctorzevitaminka
abctorzevitaminke
abctorzevitaminko

Каждое совпадение с новой строки. Или я что-то не так понял?
 
 
Сообщения:45
axwer:
У меня вывело вот так:
abctorzevitaminki
abctorzevitaminka
abctorzevitaminke
abctorzevitaminko

Каждое совпадение с новой строки. Или я что-то не так понял?

Спасибо,так получилось. Но всё таки как добиться того же результата,не меняя регулярного выражения "((abctorzevitamink.)*)sasha"? Ведь группа у меня та же самая: (abctorzevitamink.),а почему результат другой??

hi there
 
 
Сообщения:256
Цифрой два вы указываете, что хотите вывести что содержатся вот в этих скобках
(abctorzevitamink.)*

А при *, он выведет только последнее совпадение.
 
 
Сообщения:45
axwer:
Цифрой два вы указываете, что хотите вывести что содержатся вот в этих скобках
(abctorzevitamink.)*

А при *, он выведет только последнее совпадение.


А как сделать,чтоб он при таком же шаблоне выводил совпадения по очереди? =)

hi there
 
 
Сообщения:256
Я не знаю таких возможностей
 
 
Сообщения:45
axwer:
Я не знаю таких возможностей

Понятно,спасибо. Буду дальше пытаться

hi there
 
 
Сообщения:114
Fernandel:
А как сделать,чтоб он при таком же шаблоне выводил совпадения по очереди? =)

Совпадение в данном случае одно единственное. Для других совпадений не хватает обязательной части - sasha, которая съедается первым совпадением.
Чтобы найти другие витаминки придется добавить сашу после каждой из них.
 
 
Сообщения:45
Flashrunner:
Fernandel:
А как сделать,чтоб он при таком же шаблоне выводил совпадения по очереди? =)

Совпадение в данном случае одно единственное. Для других совпадений не хватает обязательной части - sasha, которая съедается первым совпадением.
Чтобы найти другие витаминки придется добавить сашу после каждой из них.

ничего не понимаю) я же хочу выводить сопадения по конкретной группе: (abctorzevitamink.)

hi there
 
 
Сообщения:114
Но совпадения ищутся по всему шаблону, а не по группам. Совпавший текст исключается из следующей итерации поиска.

А вообще, это можно проконтроллировать. Если после каждого совпадения удалять из целевой строки найденный текст (substring, Matcher.start(int group) и end(int group)) и начинать поиск заново, то получится найти все нужные совпадения, не меняя шаблона.
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет