Регулярное выражение для получения данных из 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