regex to replace string with params

2019-09-22 03:33发布


Please help me to create regex for replace a string like:
/technic/k-700/?type=repair
to a string like
/repair/k-700/
Instead of k-700 can be any another combination (between / ) and instead of repair can be only kit.
I need pattern and replacement, please. It's so hard for me.
My result not working for Wordpress:

$pattern = '/technic/([0-9a-zA-Z-]+)/?type=$matches[1]';
$replacement = '/?/([0-9a-z-]+)/';

3条回答
成全新的幸福
2楼-- · 2019-09-22 03:53

For the sake of completeness or if you need to access the url parts later.
Here's a solution using parse_url and parse_str

$str = '/technic/k-700/?type=repair';

$url = parse_url($str);

$bits = explode('/',trim($url['path'],'/'));

parse_str($url['query']);

print '/' . $type . '/' . $bits[1] . '/' ;

Which will output

/repair/k-700/
查看更多
姐就是有狂的资本
3楼-- · 2019-09-22 04:02

You don't need regex, you can do it simply by using explode():

$str = '/technic/k-700/?type=repair';
$first = explode('/', explode('?', $str)[0]);
$second = explode('=', explode('?', $str)[1]);
$first[1] = $second[1];
echo $new = implode("/",$first);

//output: /repair/k-700/
查看更多
该账号已被封号
4楼-- · 2019-09-22 04:04

You can try something like this:

$test = preg_replace(
    '~/\w+/([\w-]+)/\?type=(\w+)~i',
    '/$2/$1/',
    '/technic/k-700/?type=repair'
);
var_dump($test);

The result will be:

string(14) "/repair/k-700/"
查看更多
登录 后发表回答