Регулярное выражение - захват всех повторяющихся групп - PullRequest
9 голосов
/ 27 июля 2011

У меня есть строки, как показано ниже:

@property.one@some text here@property.two@another optional text here etc

, который содержит @.+?@ строк внутри.

Я бы хотел собрать все эти "переменные" в группы с помощью одного сопоставления с регулярным выражением, но кажется, что это невозможно, поскольку регулярное выражение возвращает только последнюю захваченную группу при повторении.

Ответы [ 2 ]

17 голосов
/ 27 июля 2011

Ты прав;большинство разновидностей регулярных выражений, включая Java, не разрешают доступ к отдельным совпадениям повторяющейся группы захвата.(Perl 6 и .NET допускают это, для записи, но это вам не помогает).

Что еще вы можете сделать?

Pattern regex = Pattern.compile("@[^@]+@");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
    // matched text: regexMatcher.group()
    // match start: regexMatcher.start()
    // match end: regexMatcher.end()
} 

Это захватит @property.one@, @property.two@ и т. Д. По одному.

2 голосов
/ 27 июля 2011

Если вы знаете, что разделитель будет @, то почему бы просто не использовать метод split (string.split('@'))?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...