Regex для захвата неизвестного количества повторных групп
Я пытаюсь написать регулярное выражение для использования в Java-программе, которая распознает шаблон, который может появляться на входе неизвестное количество раз. Мой маленький глупый пример:
String patString = "(?:.*(h.t).*)*";
Затем я пытаюсь получить доступ к совпадениям из строки типа "хижина горячая", просматривая matcher.group(i). Он запоминает только последнее совпадение (в данном случае "горячее"), потому что существует только одна группа захвата - я предполагаю, что содержимое matcher.group(1) перезаписывается при повторном использовании группы захвата. Однако мне нужен какой-то массив, содержащий как "хижину", так и "горячую".
Есть лучший способ сделать это? FWIW, что я действительно пытаюсь сделать, это подобрать все (возможно, многословные) собственные существительные после сигнального слова, где могут быть другие слова и знаки препинания между ними. Поэтому, если "увидел" - это сигнал, и мы имеем "я видел Боба с Джоном Смитом и его женой Маргарет", я хочу {"Боб", "Джон Смит", "Маргарет"}.
1 ответ
(Similar question: /questions/24004600/regulyarnoe-vyirazhenie-s-peremennyim-kolichestvom-grupp)
Это невозможно. Your best alternative is to use h.t
и использовать
while (matcher.find()) {
...
... matcher.group(1); ...
...
}
The feature does exist in.NET, but as mentioned above, there's no counterpart in Java.