简体   繁体   English

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

[英]How to Replace Custom Strings to Regex Area

I'm building "get all site links" class lib in my application. 我正在我的应用程序中构建“获取所有站点链接”类库。 Function parameters are segments and returning as website url. 函数参数是段,并作为网站url返回。

My regexs that stored in database like that blog/([az]+)(/[a-z0-9.-]+)? 我存储在数据库中的正则表达式,例如blog/([az]+)(/[a-z0-9.-]+)?

I want to replace regexs with my "matched" data (segments). 我想用我的“匹配”数据(段)替换正则表达式。

Segments are string or array, may be both. 段是字符串或数组,可以是两者。 But prefered using as array 但更喜欢用作数组

Example 1: 范例1:

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

Segments : news , new-software-released 细分: newsnew-software-released

Result : blog/news/new-software-released 结果: blog/news/new-software-released

Example 2: 范例2:

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

Segments : news 细分: news

Result : blog/news 结果: blog/news

Example 3: 范例3:

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

Segments : johndoe 细分: johndoe

Result : user/johndoe 结果: user/johndoe

Tried preg_replace array but i couldnt figure out: 尝试过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');

I still don't really understand what you're doing, but it seems like this would do what you're after: 我仍然不太了解您在做什么,但是看来这可以满足您的要求:

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');

It work well: 它运作良好:

<?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');

Thats return value is blog/news/new-software-released 多数民众赞成在返回值是blog/news/new-software-released

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM