Имам следния частичен 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);
...
}