Как написать регулярное выражение, которое захватывает неограниченное количество групп? - PullRequest
1 голос
/ 07 января 2012

У меня есть строка с несколькими словами, как str1, str2, str3, ... strN. Количество слов может быть любым и не известно на момент написания регулярного выражения.

Можно ли написать регулярное выражение, которое будет соответствовать всей строке и захватывать группы, по одному слову на группу? То есть будут захвачены следующие группы:

Группа 1: стр1
...
Группа N: стрН

Причина: Эта строка является частью большей строки. Другие элементы большой строки могут быть захвачены с помощью регулярных выражений. Я могу разобрать большую строку с помощью регулярных выражений и захватить строку с несколькими словами в одну группу. Тогда я могу разделить эту группу на другие str(s). Я думаю, что решение с одним с регулярным выражением для всей большой строки без разбиения будет более элегантным, если оно существует.

Ответы [ 2 ]

4 голосов
/ 07 января 2012

Если ваша входная строка называется input:

final String[] groups = input.split("\\s*,\\s*");

Массив groups будет содержать все совпадения.

0 голосов
/ 07 января 2012

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

    Pattern p = Pattern.compile("\\b(\\w+)\\b(?:,\\s)*");
    Matcher m = p.matcher("str1, str2, str3, ... strN");
    while(m.find()){
        System.out.println(m.group(1));
    }

Результат:

str1
str2
str3
...
strN

Чистое регулярное выражение - \b(\w+)\b(?:,\s)*, где (?: - группа без захвата (несчитается группой).

...