Driver86
@Driver86
Немодератор toster.ru

Как в регулярном выражении захватить и сохранить все строки подмаски?

Дана строка вида:
qwerty/1-2
А так же возможны варианты:
qwerty/qwerty2/1-2
qwerty/qwerty2/qwerty3/1-2
1-2
и т.п.
Кол-во подстрок может быть любым.

Пытаюсь регулярным выражением проверить строку на валидность, и заодно разбить на части.

preg_match('%^((?<par1>[a-z0-9_-]+)/)*(?<par2>[0-9]+)-(?<par3>[0-9]+)$%', 'qwerty1/qwerty2/1-2', $matches);
print_r($matches);


Ожидание:

Array
(
    [par1] => Array
        (
            [0] => qwerty1
            [1] => qwerty2
        )
    [par2] => 1
    [par3] => 2
)


Реальность:

Array
(
    [par1] => qwerty2
    [par2] => 1
    [par3] => 2
)


Есть решения, кроме explode?
  • Вопрос задан
  • 144 просмотра
Решения вопроса 1
He11ion
@He11ion
PHP-monkey
Так, например (\S+?)/(\S+?)($|/), но есть мнение что Вы пишете собственный роутинг и изобретаете велосипед. А так - да, explode сильно лучше
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы