Php 使用preg_replace()格式化链接url时出错

Php 使用preg_replace()格式化链接url时出错,php,Php,我有一个多链接: http://test.com/?sort=newest&v=list&paged=2 http://test.com/?paged=2&sort=newest&v=list 和php代码: $actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; $actual_link = preg_replace("&paged=/\D/", "", $actual_lin

我有一个多链接:

http://test.com/?sort=newest&v=list&paged=2
http://test.com/?paged=2&sort=newest&v=list
和php代码:

$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$actual_link = preg_replace("&paged=/\D/", "", $actual_link);
$actual_link = preg_replace("?paged=/\D/", "", $actual_link);
结果错误
警告:preg_replace():找不到结尾分隔符“&”…


如何删除?paged=xx和&paged=xx

正则表达式必须以符号/开头和结尾,例如: preg_replace(“/&paged=\D/”,“”,$actual_link);。 您还必须更正变量$actual\u链接: $actual\u link=“http://{$\u服务器['http\u主机]]}{$\u服务器['REQUEST\u URI']}”; 没有引号将抛出错误。

请尝试以下操作:

preg\u replace(“/[&?]paged=\d/”,“,$actual\u链接);

这正是您想要的:(注意d后面的+以防出现多个数字)

但是,最好删除&after,这样就不会变成(我们有一个无用的&before排序)

结尾处的&是可选的。我们可以这样删除它:

$link = preg_replace('/[&?]paged=\d+[&]?/', '', $link);
最后,您确定要删除该文件吗?一开始。也许你在分类前需要它?所以这并没有变成,而是

在这种情况下,我们将&设置为可选,而不删除

$link = preg_replace('/[&]?paged=\d+[&]?/', '', $link);

明智地选择毒药。

试试这个把戏

$actual_link = "http://test.com/?sort=newest&v=list&paged=2";
$actual_link = preg_replace("/[&?]paged=\d/", "&paged=", $actual_link);
echo $actual_link;
演示


您可以使用一大堆内容作为分隔符。在这里,它认为您采取了
&
。解决方案:将所有内容包装在
+
中<代码>预替换(“+&paged=/\D/+”,“,$actual\u链接)-1:看看我贴的链接。必须+1用于指向缺少的
“/”
引号!DOC ASAREL,抱歉,我是stack新手,我没有看到链接,我的意思是,您的帖子中有错误。
正则表达式必须以链接中的任何分隔符开头。;)周日好!!
$actual_link = "http://test.com/?sort=newest&v=list&paged=2";
$actual_link = preg_replace("/[&?]paged=\d/", "&paged=", $actual_link);
echo $actual_link;