У меня есть регулярное выражение:
^page/(?P<id>\d+)-(?P<slug>[^\.]+)\.html$
и массив:
$args = array( 'id' => 5, 'slug' => 'my-first-article' );
Я хотел бы иметь функцию:
my_function($regex, $args)
который вернет этот результат:
page/5-my-first-article.html
Как это можно достичь?
Что-то вроде https://docs.djangoproject.com/en/dev/ref/urlresolvers/#reverse
Интересный вызов, я закодировал что-то, что работает для этого примера, обратите внимание, что для этого кода вам нужен PHP 5.3+:
$regex = '^page/(?P<id>\d+)-(?P<slug>[\.]+)\.html$'; $args = array( 'id' => 5, 'slug' => 'my-first-article' ); $result = preg_replace_callback('#\(\?P<(\w+)>[^\)]+\)#', function($m)use($args){ if(array_key_exists($m[1], $args)){ return $args[$m[1]]; } }, $regex); $result = preg_replace(array('#^\^|\$$#', '#\\\\.#'), array('', '.'), $result); // To remove ^ and $ and replace \. with . echo $result;
Выход: page/5-my-first-article.html
Онлайн-демонстрация .