简体   繁体   中英

PHP preg_replace url get parameters in string

Thanks to @sdape I've come a step close but I'm not quite there yet.

What I'm trying to do is replace all instances of a string in a block of text. I want to replace something like this:

user is ?user_id=34&first_name=Ralph so is ?user_id=1 also

With this:

user is /user/34/ so is /user/1/ also

Here is the preg_replace code I'm using:

$pattern = '#\?user_id=([0-9]+)#';
$replace = '/user/$1/';
echo preg_replace($pattern,$replace,$string);

With that pattern I end up with this:

user is /user/34/&first_name=Ralph so is /user/1/ also

Thanks again.

print preg_replace(
   '#\?user_id=([0-9]+)\&(first_name=(?:.*))#',
   '/user/$1?$2',
   '?user_id=34&first_name=Ralph'
);

result :

/user/34?first_name=Ralph  if get it right..

try this:

$string = "user is ?user_id=34&first_name=Ralph so is ?user_id=1 also";
$result = preg_replace('/\?(user)_id=(\d+)(.*?)(?! )/i', '/$1/$2/$3', $string );

echo $result ;

Output:

user is /user/34/&first_name=Ralph so is /user/1/ also

DEMO

I'd use this:

$string = 'user is ?user_id=34&first_name=Ralph so is ?user_id=1 also';
$pattern = '#\?user_id=([0-9]+)\S*#';
$replace = '/user/$1/';
echo preg_replace($pattern, $replace, $string);

Where \\S stands for any character that is not a space.

Output:

user is /user/34/ so is /user/1/ also

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM