Ah, right (was looking at the wrong sample)...
$searchquery = "query=© ungovernable&searchuser=&exactname=0&starteronly=0&forumchoice[]=43&forumchoice[]=3&childforums=1&titleonly=0&showposts=0&searchdate=&beforeafter=&sortby=&sortorder=&replyless=0&replylimit=0&searchthreadid=0&saveprefs=0&quicksearch=1&searchtype=1&exclude=&nocache=0&ajax=0&imagehash=&imagestamp=&";
preg_match('#query=\K.*?(?=&)#i', $searchquery, $terms);
echo $terms[0];
Similar, yet different. This way, we negate the need to capture (which in and of itself adds performance cost to the regex engine - admittedly, on a simple sample / small volume, the speed difference would be infinitesimal), as well as perform an entire replace operation (a pattern match is a pattern match, regardless of preg_match or preg_replace, as the entire pattern must be successfully matched to succeed [which is always stored into variable $0 anyway]). So instead, we are simply tapping into $0 as $term[0] (sans capturing / replacement operations).
Granted, it can be argued that this is all splitting hairs.. depending on the source string / volume needed to push these patterns against, it might not make a lick of a difference from a human perception standpoint.