4

私はこのような正規表現を持っています:

^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のようなもの

4

1 に答える 1

6

興味深い課題です。このサンプルで機能するものをコーディングしました。このコードが機能するには、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

オンラインデモ

于 2013-05-11T14:36:19.410 に答える