PHP preg_replace 在斜线之间替换
PHP preg_replace replace between slash
我有一个 PHP 函数,它应该从给定的 URL.
中删除一个开始 /
结束 /
的值
例如:从 http://my-domain.com/search/page_2/order_asc
中删除 /page_###/
。
结果将是:http://my-domain.com/search/order_asc
.
而且URL可能是这样的:http://my-domain.com/search/order_asc/page_2
。最后没有结局/
;
function stripDir($url, $mask){
return preg_replace('/' . $mask . '[\s\S]+?/', '', $url);
}
上述函数应该能够从以下 URLS 中删除 page_5
...
stripDir('http://my-domain.com/search/page_5/order_asc', 'page')
和 stripDir('http://my-domain.com/search/order_asc/page_5', 'page')
function stripDir($url, $mask) {
return preg_replace('/\/' . preg_quote($mask, '/') . '[^\/]+/', '', $url);
}
您当前的正则表达式中的 /
是 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
此外,由于您正在检查开始和结束 /
,因此您需要重新放置其中一个 /
。
我有一个 PHP 函数,它应该从给定的 URL.
中删除一个开始/
结束 /
的值
例如:从 http://my-domain.com/search/page_2/order_asc
中删除 /page_###/
。
结果将是:http://my-domain.com/search/order_asc
.
而且URL可能是这样的:http://my-domain.com/search/order_asc/page_2
。最后没有结局/
;
function stripDir($url, $mask){
return preg_replace('/' . $mask . '[\s\S]+?/', '', $url);
}
上述函数应该能够从以下 URLS 中删除 page_5
...
stripDir('http://my-domain.com/search/page_5/order_asc', 'page')
和 stripDir('http://my-domain.com/search/order_asc/page_5', 'page')
function stripDir($url, $mask) {
return preg_replace('/\/' . preg_quote($mask, '/') . '[^\/]+/', '', $url);
}
您当前的正则表达式中的 /
是 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
此外,由于您正在检查开始和结束 /
,因此您需要重新放置其中一个 /
。