Проблемы с экстрактором регулярных выражений scala

У меня проблема с экстрактором регулярных выражений, это мое регулярное выражение

val regex = """(some\/params\/results\/\b[A-Z]{3}\/[A-Z]{3}\b\/)*""".r

И когда я пытаюсь сделать это:

val regex(res) = "some/params/results/XXX/YYY/2016-05-09/2016-05-18/1/0/0"

Я получаю:

some/params/results/XXX/YYY/2016-05-09/2016-05-18/1/0/0 (of class java.lang.String)
scala.MatchError: some/params/results/XXX/YYY/2016-05-09/2016-05-18/1/0/0 (of class java.lang.String)

Я хотел бы использовать его в сопоставлении с образцом следующим образом:

url match {
  case regex(res) => res
  case _ => url
}

извлечь группу some/params/results/XXX/YYY/


person IgnacioPL    schedule 09.05.2016    source источник


Ответы (1)


Добавить предпоследнюю точку элемента . перед *

Объяснение:

(...)* - звездочка в конце означает: ноль или более совпадений содержимого в скобках.

(...).* - звездочка в конце означает: ноль или более совпадений ., где . - любой одиночный символ.

person vvg    schedule 09.05.2016
comment
это не будет соответствовать в таком случае. - person vvg; 09.05.2016
comment
Я предлагаю объяснить разницу между текущим регулярным выражением и фиксированным. - person Alexey Romanov; 10.05.2016