Regex для захвата неизвестного количества повторных групп - PullRequest
3 голосов
/ 26 марта 2011

Я пытаюсь написать регулярное выражение для использования в Java-программе, которая распознает шаблон, который может появиться на входе неизвестное количество раз.Мой маленький глупый пример:

String patString = "(?:.*(h.t).*)*";

Затем я пытаюсь получить доступ к совпадениям из строки типа "хижина горячая", просматривая matcher.group (i).Он запоминает только последнее совпадение (в данном случае «горячее»), потому что существует только одна группа захвата - я предполагаю, что содержимое matcher.group (1) перезаписывается при повторном использовании группы захвата.Однако мне нужен какой-то массив, содержащий и «хата» и «горячий».

Есть ли лучший способ сделать это?Кстати, то, что я действительно пытаюсь сделать, это подобрать все (возможно, многословные) собственные существительные после сигнального слова, где между ними могут быть другие слова и знаки препинания.Поэтому, если «увидел» - это сигнал, и мы имеем «я видел Боба с Джоном Смитом и его женой Маргарет», я хочу {«Боб», «Джон Смит», «Маргарет»}.

1 Ответ

6 голосов
/ 26 марта 2011

(Аналогичный вопрос: Регулярное выражение с переменным числом групп? )

Это невозможно.Ваша лучшая альтернатива - использовать h.t и

while (matcher.find()) {
    ...
    ... matcher.group(1); ...
    ...
}

Функция существует в .NET , но, как упоминалось выше, аналога нетна Java.

...