/ / Capture Regex повтарящ се низ между наклонени черти в URL - java, regex, string

Capture Regex повторение на низ между срязания в URL - java, regex, string

Имам следния частичен URL адрес, който може да бъде

/ Тя / ЮЯ/ Тест / параметър + 1 / параметър-2/1234 / gfd4

По принцип две букви в началото наклонена чертадруг неизвестен низ и след това поредица от повтарящи се низове между наклонени черти Трябва да уловя всеки низ (знам, че разделянето с / разделителя би било добре, но ми е интересно да знам как мога да извлека с regex). Първо излязох с това:

^/([a-zA-Z]{2})/([a-zA-Z]{1,10})(/[a-zA-Z1-9+-]+)

но само улавя

група1: то група2: xyz група3: / тест

и разбира се игнорира останалата част от низа.

Ако добавя знак * в края, той улавя само последното изречение:

^/([a-zA-Z]{2})/([a-zA-Z]{1,10})(/[a-zA-Z1-9+-]+)*

група1: то група2: xyz група3: / gfd4

Така че, очевидно ми липсват някои основи, така че в допълнение към правилния регекс бих искал да имам обяснение.

Аз маркирах като Java, защото двигателят, който анализира регекса е JDK 7. По мое знание всеки двигател може да има разлики.

Отговори:

0 за отговор № 1

Като споменато тук, това се очаква:

С една група в модела, можете да получите само един точен резултат в тази група.
Ако вашата група за заснемане се повтаря от шаблона (използвахте количественото число + на заобикалящата група, която не улавя), се съхранява само последната стойност, която съответства на нея.

Бих предпочел да уловя останалата част от низ в group3 ((/.*$), като в тази демонстрация), след това използвайте сплит около "/". Или приложете шаблон на yhat върху останалата част от низ:

Pattern p = Pattern.compile("(/[a-zA-Z1-9+-]+)");
Matcher m = p.matcher(str);
while (m.find()) {
String place = m.group(1);
...
}