Задать вопрос
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?
  • Вопрос задан
  • 145 просмотров
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
He11ion
@He11ion
PHP-monkey
Так, например (\S+?)/(\S+?)($|/), но есть мнение что Вы пишете собственный роутинг и изобретаете велосипед. А так - да, explode сильно лучше
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы