Ваше регулярное выражение не удается, потому что вы ищете амперсанд после параметра page
с его значением.
Вы можете сделать амперсанд необязательным, добавив знак вопроса после него.
$url = 'www.example.com?category=computers&page=10';
$cleanUrl = preg_replace('/page=[0-9,]+&?/', '', $url);
Пример, https://regex101.com/r/uW8uV8/1
Для более через регулярное выражение попробовать:
<?php
$url = 'www.example.com?&category=cat&page=10';
$cleanUrl = rtrim(preg_replace('/(&|\?)page=[0-9,]+&?/', '$1', $url), '&?');
echo $cleanUrl;
Это требует функцию rtrim
, хотя для удаления клея параметра трейлинг. Это будет приходиться ...
Страницы самого по себе, www.example.com?page=10
Страница в качестве последнего параметра, www.example.com?species=wolf & страницы = 10
Страницы в качестве первого параметра, www.example.com?page=10 & вида = Wolf
страницы в качестве среднего параметра, www.example.com?cat=tom & мышей = канистра & страницы = 10 & вида = Wolf
может быть хорошо, если бы начало выражения соответствовало или? или &, так что что-то вроде 'category = weirdpage = 1000 &' в URL-адресе не завалено в их URL-адресе. Это маловероятно, но может быть хорошо охранять – EdgeCaseBerg