Шаблон соответствия регулярных выражений для построения URL

У меня есть следующий шаблон URL-пути

/posts(/:id:)?

Что было бы лучшим способом заполнить его аргументами и сопоставить их с шаблоном?

Во-первых, я заменяю соответствующий шаблон аргумента (:id:) с реальным предоставленным и построить перспективы выходной URL

preg_replace_callback('~:([^:]+):~', function($match) {
//aggregate the match &&
//1) return the output url ||
//2) return the output pattern
}, $pattern);

В зависимости от аргумента, это может выглядеть примерно так: /posts/3, Во-вторых, я называю preg_replace_callback снова, чтобы построить шаблон вывода. Наконец, я сравниваю два результата preg_match обеспечить достоверность сегмента. Псевдокод

argument => 3,     outputUrl     => /posts/3
pattern  => [\d]+, outputPatterm => /posts(/[\d]+)?

preg_match(outputPattern, outputUrl) => matches...

пример

$this->patterns = [
'id' => '[\d]+'
];

$this->arguments = [
'id' => 3
];

$pattern = '/posts(/:id:)?';

$outputPattern = preg_replace_callback('~:([^:]+):~', function($match){
return $this->patterns[$match[1]];
}, $pattern);

$outputUrl = preg_replace_callback('~:([^:]+):~', function($match){
return $this->arguments[$match[1]];
}, $pattern);

if (preg_match('~^'.$outputPattern.'$~', $outputUrl)) {
//nice, they match. Still two preg_* methods used
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector