Перекрывающиеся регулярные выражения часть II - PullRequest
2 голосов
/ 14 октября 2011

В этот вопрос Я попросил регулярное выражение, чтобы превратить /abc/def/ghi в {/abc/def/ghi, /def/ghi, /ghi}.Ответ состоял в том, чтобы использовать lookahead с выражением (?=(/.*)).

Существует ли регулярное выражение для захвата из той же строки {/abc, /abc/def, /abc/def/ghi}?(Заказ не важен.)

Ответы [ 2 ]

1 голос
/ 14 октября 2011

Хорошо, вот решение, которое работает для вашего единственного тестового примера, хотя я не нашел способа сгруппировать его в одну хорошую группу:

Matcher m = Pattern.compile("((?<=(^.*))(/[^/]*))").matcher("/abc/def/ghi");
while (m.find()) {
   System.out.println(m.group(2) + m.group(3));
}

По сути, он находит каждую подстроку / xxx по мере их появления, но затем также объединяет все перед этим соответствием. Это работает для вашего тестового примера, но может иметь ограничения для более сложных случаев.

0 голосов
/ 14 октября 2011

Это будет делать то, что вы хотите:

(?<=(/.*)\b)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...