Php 反向预紧更换

Php 反向预紧更换,php,regex,preg-replace,generator,Php,Regex,Preg Replace,Generator,我有这样的正则表达式: ^page/(?P<id>\d+)-(?P<slug>[^\.]+)\.html$ 我想拥有以下功能: my_function($regex, $args) 将返回以下结果: page/5-my-first-article.html 如何做到这一点 类似于有趣的挑战,我编写了一些适用于此示例的代码,请注意,要使此代码正常工作,您需要PHP 5.3+: $regex = '^page/(?P<id>\d+)-(?P<slug&

我有这样的正则表达式:

^page/(?P<id>\d+)-(?P<slug>[^\.]+)\.html$
我想拥有以下功能:

my_function($regex, $args)
将返回以下结果:

page/5-my-first-article.html
如何做到这一点


类似于

有趣的挑战,我编写了一些适用于此示例的代码,请注意,要使此代码正常工作,您需要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;
$regex='^page/(?P\d+)-(?P[\.]+)\.html$;
$args=数组(
“id”=>5,
“slug”=>“我的第一篇文章”
);
$result=preg\u replace\u回调('\\(\?P[^\)]+\'),函数($m)use($args){
如果(数组\键\存在($m[1],$args)){
返回$args[$m[1]];
}
}美元(regex),;
$result=preg\u replace(数组('\^^^\$\\\\$\\\\\\\\.'\\\\.\\\\.\\\\\\.\\\\\\.'')、数组('''.')、$result);//删除“^”和“$”并替换\。具有
回声$结果;
输出:
page/5-my-first-article.html


为什么要使用正则表达式从数组中获取字符串,其中数组中的某些项与其他文本连接在一起?在什么上下文中,“获取此项”是什么意思?因为我使用正则表达式来匹配URL。我将使用函数再次从此正则表达式创建URL。是否要使用数组数据
$args
输入创建URL?是的,来自格式化为与正则表达式匹配的$args数据的URL。
$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;