Используйте parse_url
, чтобы получить часть строки запроса URL; и parse_str
для разбора строки запроса:
$query = parse_url($url, PHP_URL_QUERY);
parse_str($query, $params);
var_dump($params);
Вы можете манипулировать $ params по своему усмотрению и собирать его в строку запроса с помощью функции http_build_query
:
$query = http_build_query($params);
Теперь, используя регулярное выражение:
$url = preg_replace('/^
([^?#]+) # everything except the query and #hash
\? # the ?
[^#]*? # unwanted params
\bparam_a=([^&#]+) # param_a
[^#]*? # unwanted params
\bparam_b=([^&#]+) # param_b
[^#]*? # rest of query
(\#.*)? # optional #hash
$/x', '\1?param_a=\2¶m_b=\3\4', $url);
Это работает, только если param_a и param_b появляются в этом порядке ; предпочитаю решение parse_url / parse_str;)