@lexstile

Разбор регулярного выражения на пальцах?

$route = preg_replace('/{([a-z]+):([^\}]+)}/', '(?P<\1>\2)', $route);

Служит для проверки подобных выражений:
  1. {id:\d+}
  2. {page:\w+}

Больше интересует, что происходит здесь: ([^\}]+)
И здесь: (?P<\1>\2)
  • Вопрос задан
  • 216 просмотров
Решения вопроса 1
VicTHOR
@VicTHOR
(╮°-°)╮┳━━┳ ( ╯°□°)╯ ┻━━┻
preg_replace() служит для замены, первый параметр - регулярное выражение. Заключается в '//'. Второй параметр - то, на что нужно заменить.

([a-z]+) - скобочная группа номер 1, указано: "символы от a до z, не менее 1"
([^\}]+) - скобочная группа номер 2, здесь указано: "всё, кроме }, от 1 символа и более". В квадратных скобках, если первый символ [^ ] - далее идут символы, которые необходимо исключить. Слэш \ экранирует символ }, не обязателен, фигурная скобка не является спецсимволом.
(?P<\1>\2) - замена, которая убирает все, что не в скобочных группах (двоеточие и { } ),
\1 и \2 - это вызов первой и второй скобочной группы. Добавляет (?P< > )

Т.е. находим выражение, которое начинается с {, затем идут символы a-z - захватываем их в группу, затем двоеточие, затем любые символы, кроме }, захватываем в группу, и все заканчивается на }
Затем заменяем на (?P<, добавляем первую захваченную группу, >, добавляем вторую захваченную группу и )
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Moskus
@Moskus
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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