Нет реальной причины использовать здесь регулярные выражения, вместо этого вы можете использовать функции строк и массивов.
Вы можете explode
деталь после ?
(которую можно получить, используя substr
для получения подстроки и strrpos
чтобы получить позицию последнего ?
) в массиве, и используйте unset
, чтобы удалить arg3
, а затем join
, чтобы собрать строку обратно. :
$string = "http://domain.com/php/doc.php?arg1=0&arg2=1&arg3=0";
$pos = strrpos($string, "?"); // get the position of the last ? in the string
$query_string_parts = array();
foreach (explode("&", substr($string, $pos + 1)) as $q)
{
list($key, $val) = explode("=", $q);
if ($key != "arg3")
{
// keep track of the parts that don't have arg3 as the key
$query_string_parts[] = "$key=$val";
}
}
// rebuild the string
$result = substr($string, 0, $pos + 1) . join($query_string_parts);
См. Это в действии на http://www.ideone.com/PrO0a