我有一个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')
答案 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
此外,由于您要检查开始和结束/
,因此您需要重新放置其中一个/
。
答案 1 :(得分:2)
function stripDir($url, $mask) {
return preg_replace('/\/' . preg_quote($mask, '/') . '[^\/]+/', '', $url);
}