PHP preg_replace替换斜杠

时间:2016-06-29 18:05:01

标签: php regex preg-replace

我有一个PHP函数,它应该从给定的URL中删除一个值为/并结束/的值。

例如:从/page_###/删除http://my-domain.com/search/page_2/order_asc。 结果将是:http://my-domain.com/search/order_asc

但网址也可能如下:http://my-domain.com/search/order_asc/page_2。最后没有结尾/;

function stripDir($url, $mask){
    return preg_replace('/' . $mask . '[\s\S]+?/', '', $url);
}

以上功能应该可以从以下网址中删除page_5 ... stripDir('http://my-domain.com/search/page_5/order_asc', 'page')stripDir('http://my-domain.com/search/order_asc/page_5', 'page')

2 个答案:

答案 0 :(得分:3)

当前正则表达式中的/delimiters,而不是您要查找的起始和结束字符。尝试更改分隔符,它应该工作。此外,如果尾随/是可选的,您应该修改我认为的正则表达式:

~/page_[\s\S]+?(/|\z)~

或按照您的功能:

~/' . $mask . '[\s\S]+?(/|\z)~

适合你。

演示:https://regex101.com/r/sH7bE2/3
刚修改过的分隔符的演示:https://regex101.com/r/sH7bE2/2
原始正则表达式的演示:https://regex101.com/r/sH7bE2/1

此外,由于您要检查开始和结束/,因此您需要重新放置其中一个/

使用替换演示:https://regex101.com/r/sH7bE2/4

答案 1 :(得分:2)

function stripDir($url, $mask) {
    return preg_replace('/\/' . preg_quote($mask, '/') . '[^\/]+/', '', $url);
}