Обратный preg_replace

У меня есть регулярное выражение:

^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

Онлайн-демонстрация .