我正在我的应用程序中构建“获取所有站点链接”类lib。函数参数是段并作为网站URL返回。
我的正则表达式存储在数据库中,如blog/([a-z]+)(/[a-z0-9.-]+)?
我想用我的“匹配”数据(片段)替换正则表达式。
细分是字符串或数组,可能都是。但是首选使用数组
示例1:
正则表达式:blog/([a-z]+)(/[a-z0-9.-]+)?
细分:news
,new-software-released
结果:blog/news/new-software-released
示例2:
正则表达式:blog/([a-z]+)(/[a-z0-9.-]+)?
细分:news
结果:blog/news
示例3:
正则表达式:user(/[a-z0-9.-]+)?
细分:johndoe
结果:user/johndoe
尝试了preg_replace数组,但我无法弄明白:
function get_url($segments){
$regex = "blog/([a-z]+)(/[a-z0-9.-]+)?"
$replacements = explode('|', trim($segments));
$count = 0;
return preg_replace('/'.$regex.'/', '$replacements[$count++]', $regex);
}
echo get_url('news|new-software-released');
答案 0 :(得分:1)
我仍然不明白你在做什么,但看起来这样你会做的就是:
function get_url($prefix, $segments) {
return $prefix . '/' . implode('/', explode('|', $segments));
}
echo get_url('blog', 'news|new-software-released');
echo get_url('blog', 'news');
echo get_url('user', 'johndoe');
答案 1 :(得分:0)
效果很好:
<?PHP
function get_url($segments){
$regex = "blog/([a-z]+)(/[a-z0-9.-]+)?";
$url = "blog/test";
$replacements = explode('|', trim($segments));
if(count($replacements) > 1) $replacements = 'blog/' . $replacements[0] . '/' . $replacements[1];
else $replacements = 'blog/' . $replacements[0];
$count = 0;
return preg_replace('#'.$regex.'#', $replacements, $url);
}
echo get_url('news|new-software-released');
这个返回值是blog/news/new-software-released