Регулярное выражение для получения данных из url

Всем привет. Помогите, пожалуйста написать регулярное выражение.

Есть урл: uslugi/cat-1/cat-2/cat-3/usluga-text/

Мне нужно регулярное выражение, которое будет получать "cat-1/cat-2/cat-3" (именно в таком виде) и "usluga-text" отдельно если, в урле есть слово, которое начинается с "usluga-". Если в урле нет слова, которое начинается с "usluga-", то просто возвращало "cat-1/cat-2/cat-3".

Еще раз, если такой урл (uslugi/cat-1/cat-2/cat-3/usluga-text/), то мне нужно получить:

  • cat-1/cat-2/cat-3
  • usluga-text

Если такой урл (uslugi/cat-1/cat-2/cat-3), то нужно получить:

  • cat-1/cat-2/cat-3

Опять же этих вложенных cat-1/cat-2/... может быть любое количество, но не меньше 1.

Заранее спасибо всем, кто потратит время на мой вопрос!


Ответы (1 шт):

Автор решения: Эдуард

Получайте отдельно cat-1, cat-2, и т.д., и выполняйте преобразование в строку с разделителем '/'. А подстрока usluga-text должна быть необязательной:

$str = 'uslugi/cat-1/cat-2/cat-3/usluga-text/';
$cat = $service = '';

if (preg_match_all('~(cat-\d+)+/?\K(?:usluga-\pL+)?~', $str, $out)) {
    $cat = join('/', $out[1]);
    $service = $out[0][2] ?? '';
}

var_dump( $cat, $service );

Результат:

cat-1/cat-2/cat-3

usluga-text
→ Ссылка