PHP: Регулярные выражения: Разбор URL с помощью preg_match

Регулярные выражения (регэкспы) — мощный инструмент для работы с текстом, позволяющий решать широкий спектр задач, связанных с поиском, извлечением и обработкой данных. Одна из распространенных задач — разбор URL-адресов, когда нужно извлечь отдельные части (модуль, тип, идентификатор) из URL. В этой статье мы рассмотрим, как это сделать с помощью функции preg_match() в PHP.

Пример регулярного выражения


Рассмотрим шаблон регулярного выражения, который помогает извлечь части URL:
preg_match('%^/(?<module>[-\w\d]+)(?:/(?<type>[-\w\d]+))?(?:/(?<id>[-\w\d]+))?/?$%', $urlPath, $match);

Разбор регулярного выражения


  • %^/: начало строки, после которого идёт косая черта (/).
  • (?<module>[-\w\d]+): именованная группа захвата для выделения модуля. Допускаются буквы, цифры, тире и подчёркивание.
  • (?:/(?<type>[-\w\d]+))?: необязательная группа захвата для типа. Опционально присутствует после косой черты.
  • (?:/(?<id>[-\w\d]+))?: необязательная группа захвата для идентификатора. Опционально присутствует после косой черты.
  • /?$: необязательная завершающая косая черта в конце строки.

Пример использования


Допустим, у нас есть URL: /blog/post/123:
$urlPath = '/blog/post/123';

preg_match('%^/(?<module>[-\w\d]+)(?:/(?<type>[-\w\d]+))?(?:/(?<id>[-\w\d]+))?/?$%', $urlPath, $match);

if (!empty($match)) {
    print_r($match);
}

Результат:
Array
(
    [0] => /blog/post/123
    [module] => blog
    [1] => blog
    [type] => post
    [2] => post
    [id] => 123
    [3] => 123
)

Интерпретация результата
  • [0]: совпадающая строка (/blog/post/123).
  • [module]: имя модуля (blog).
  • [type]: тип (post).
  • [id]: идентификатор (123).

Важные моменты


  • Регулярное выражение учитывает опциональные части URL: тип и идентификатор.
  • В случае отсутствия части URL, соответствующая группа будет пустой.
  • Обязательно проверяйте наличие результата (!empty($match)), чтобы избежать ошибок.

Заключение


Регулярные выражения позволяют эффективно извлекать части URL, облегчая разработку приложений, работающих с веб-адресами. Правильное построение регэкспа сэкономит немало времени и нервов, гарантируя точность и скорость обработки данных.

Автор:  07.12.2025 05:46:36 pm