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

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

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