One option without regular expressions is to use parse_url with parse_str then put the URL back together.
>>> $url = parse_url("http://www.test.com/search?loc=Rich%2C+VA&serv=1&spec=0&min_price=5&max_price=9999&date=&time=0&filters=0&page=45&latPos=459.16689191899521&longPos=-1263.08099819543457&zoom=11&ne_lat=499.31460613487112&ne_lng=-1222.88049770715332&sw_lat=458.90693340071935&sw_lng=-1923.2801253927002")
=> [
"scheme" => "http",
"host" => "www.test.com",
"path" => "/search",
"query" => "loc=Rich%2C+VA&serv=1&spec=0&min_price=5&max_price=9999&date=&time=0&filters=0&page=45&latPos=459.16689191899521&longPos=-1263.08099819543457&zoom=11&ne_lat=499.31460613487112&ne_lng=-1222.88049770715332&sw_lat=458.90693340071935&sw_lng=-1923.2801253927002"
]
>>> $query = [];
=> []
>>> parse_str($url['query'], $query)
=> null
>>> $query
=> [
"loc" => "Rich, VA",
"serv" => "1",
"spec" => "0",
"min_price" => "5",
"max_price" => "9999",
"date" => "",
"time" => "0",
"filters" => "0",
"page" => "45",
"latPos" => "459.16689191899521",
"longPos" => "-1263.08099819543457",
"zoom" => "11",
"ne_lat" => "499.31460613487112",
"ne_lng" => "-1222.88049770715332",
"sw_lat" => "458.90693340071935",
"sw_lng" => "-1923.2801253927002"
]
>>> $query['page'] = 99
=> 99
>>> $url['query'] = http_build_query($query);
=> "loc=Rich%2C+VA&serv=1&spec=0&min_price=5&max_price=9999&date=&time=0&filters=0&page=99&latPos=459.16689191899521&longPos=-1263.08099819543457&zoom=11&ne_lat=499.31460613487112&ne_lng=-1222.88049770715332&sw_lat=458.90693340071935&sw_lng=-1923.2801253927002"
>>> http_build_url($url)
For http_build_url you need the pecl-http extension. If you don't have it you can just concatenate.
>>> $url['scheme'] . '://' $url['host'] . $url ['path'] . '?' . $url['query']
=> "http://www.test.com/search?loc=Rich%2C+VA&serv=1&spec=0&min_price=5&max_price=9999&date=&time=0&filters=0&page=99&latPos=459.16689191899521&longPos=-1263.08099819543457&zoom=11&ne_lat=499.31460613487112&ne_lng=-1222.88049770715332&sw_lat=458.90693340071935&sw_lng=-1923.2801253927002"
Here is an example script
$pageURL = "http://www.test.com/search?loc=Rich%2C+VA&serv=1&spec=0&min_price=5&max_price=9999&date=&time=0&filters=0&page=45&latPos=459.16689191899521&longPos=-1263.08099819543457&zoom=11&ne_lat=499.31460613487112&ne_lng=-1222.88049770715332&sw_lat=458.90693340071935&sw_lng=-1923.2801253927002";
$newUrl = parse_url($pageUrl);
$query = parse_str($new_url['query']);
$query['page'] = 99;
$newUrl['query'] = http_build_query($query);
http_build_url($newUrl);
str_replaceits far more efficientstr_replace("&page=45&", "&page=99&", $pageURL);