如何将自定义字符串替换为正则表达式区域

时间:2014-02-03 08:42:56

标签: php regex codeigniter

我正在我的应用程序中构建“获取所有站点链接”类lib。函数参数是段并作为网站URL返回。

我的正则表达式存储在数据库中,如blog/([a-z]+)(/[a-z0-9.-]+)?

我想用我的“匹配”数据(片段)替换正则表达式。

细分是字符串或数组,可能都是。但是首选使用数组

示例1:

正则表达式:blog/([a-z]+)(/[a-z0-9.-]+)?

细分:newsnew-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');

2 个答案:

答案 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