@jekahm

Парсинг url по шаблону в PHP?

Доброго времени суток!
Как с помощью регулярных выражений (или может еще какими-то способами) можно определить, что определённые урлы соответствуют определённым путям с токенами, а именно (url => шаблон):
1) node/11221 => node/%node
2) node/38429/news => node/%node/news
3) album/34234/shadowbox/321023 => album/%album/shadowbox/%photo

Заранее благодарен!
  • Вопрос задан
  • 507 просмотров
Решения вопроса 1
@jekahm Автор вопроса
Написал скрипт, который бы решал данный вопрос:

$patterns = [
    "node/%node",
    "node/%node/news",
    "album/%album/shadowbox/%photo",
    "media/photo",
    "blogs",
    "news",
    "node/%node/players",
];

$url = "node/11111/news";

foreach ($patterns as $pattern) {

    $result_pattern = preg_replace("/\/%[^\/]+/x", '/*', $pattern);

    $to_replace = ['/\\\\\*/'];
    $replacements = ['[^\/]+'];

    $result_pattern = preg_quote($result_pattern, '/');
    $result_pattern = '/^(' . preg_replace($to_replace, $replacements, $result_pattern) . ')$/';

    if (preg_match($result_pattern, $url)) {
        echo "<pre>" . $pattern . "</pre>"; 
    }

}


Можете проанализировать, достаточно ли он функционален в данном случае. И также хотел бы узнать, зачем в данной строке $to_replace = ['/\\\\\*/']; слэш для экранирования используется целых 5 раз (нашел такой спсособ в интернете).
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Учите регулярные выражения.

p.s. А еще лучше - возьмите готовый компонент для маршрутизации.
Ответ написан
xmoonlight
@xmoonlight Куратор тега PHP
https://sitecoder.blogspot.com
Здесь регулярками я бы не стал делать, лучше использовать "водопадный" рекурсивный спуск по "дереву", в случае ошибки - возвращать ближайший совпавший шаблон.
Ответ написан
Ваш ответ на вопрос

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

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