php 正则替换url参数 比如页数p=x 如何实现?
例子:echo$url='?s=view&p=5';echo'<br>';$p=6;echopreg_replace('/^p=.*$/',$p',$url);结果却是:...
例子:
echo $url='?s=view&p=5';
echo '<br>';
$p=6;
echo preg_replace('/^p=.*$/', $p', $url);
结果却是:
?s=view&p=5
?s=view&p=5
为什么没有输出:?s=view&p=6 展开
echo $url='?s=view&p=5';
echo '<br>';
$p=6;
echo preg_replace('/^p=.*$/', $p', $url);
结果却是:
?s=view&p=5
?s=view&p=5
为什么没有输出:?s=view&p=6 展开
1个回答
推荐于2016-09-15
展开全部
echo $url='?s=view&p=5';
echo '<br>';
$p=6;
echo preg_replace('/p=([\d]+)/', 'p=' . $p, $url);
echo '<br>';
echo preg_replace('/([\d]+)/', $p, $url);
另外 为什么
echo preg_replace('/^p=.*$/', $p, $url);
有问题
/^p=.*$/ 匹配的是 以p开头以任意字符结尾的字符串,而?s=view&p=5 很明显不是以p开头的,所以匹配失败,返回原字符串 $url;
追问
/p=^.*$/这样可以吗?
追答
这样有两个问题:
因为没有小括号,所以不管正则如何都不会匹配替换.
(pattern): 匹配 pattern 并获取这一匹配
^ 是匹配字符串的开始位置
$str = "aaakjlkjlkdflkaaa";
echo preg_replace('/^(aaa)/', '-', $str); // 把开头的aaa替换为-
echo "<br />";
echo preg_replace('/(aaa)$/', '-', $str); // 把结束的aaa替换为-
而 /p=^.*$/ 很明显匹配的页码不是整个字符串$url的开始位置.
可以改成这样,用$匹配字符串的结束位置
echo preg_replace('/p=(.*)$/', 'p=' . $p, $url);
另外建议能精确匹配就精确匹配.实在是没法了再用.*
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询