繁体   English   中英

如何用正则表达式php替换URL的多个参数

[英]How to replace multiple parameters of a URL with regex php

我有一个逻辑问题,因为我不太经常处理正则表达式。 我想知道如何将多个值从一个URL替换为另一个值。 例如:

http://example.com/values?value1=12121&order=3&external=AFB3432

我想要一个正则表达式来选择参数,并用我想要的替换它们:

http://example.com/values?value1=10000&order=3&external=AAAAA

如果有比使用Regex更好的方法,那就太好了!

"params_": {
            "value1": {
                "paramName": "value1",
                "paramValue": "12121"
            },
            "order": {
                "paramName": "order",
                "paramValue": "3",

            },
            "external": {
                "paramName": "external",
                "paramValue": "AFB3432"
            },

然后,原始URL为:

http://example.com/values?value1=12121&order=3&external=AFB3432

但是,我需要更改“值1”和“外部”的值。 参数永远不会改变:

http://example.com/values?value1=10000&order=3&external=AAAAA

谢谢!

parse_str ,您可以使用内置的PHP URL解析( parse_urlparse_str )和查询构建( http_build_query )函数。 我假设您可以将替换值放入数组中:

$replacements = array('value1' => 10000, 'external' => 'AAAAA');
$url = 'http://example.com/values?value1=12121&order=3&external=AFB3432';
// extract the query part
$query = parse_url($url, PHP_URL_QUERY);
// and parse it into variables
parse_str($query, $params);
// merge the parameter values with the replacements
$new_params = array_merge($params, $replacements);
// create a new query string
$new_query = http_build_query($new_params);
// and reassemble the URL
$new_url = parse_url($url, PHP_URL_SCHEME) . "://" . parse_url($url, PHP_URL_HOST) . parse_url($url, PHP_URL_PATH) . "?" . $new_query;
echo $new_url;

输出:

http://example.com/values?value1=10000&order=3&external=AAAAA

3v4l.org上的演示

您还可以使用更基本的strpos和str_replace方法。

$link = "http://example.com/values?value1=12121&order=3&external=AFB3432*";

$find = ["value1=", "order=", "external="];
$repl = [10000, 3, "AAAAA"];

foreach($find as $key => $f){
    $pos1 = strpos($link, $f);
    $pos2 = strpos(substr($link, $pos1), "&");
// I substring $link above to make $pos2 a "lenght" instead of a position

    if($pos2 !== false){ // if $pos2 is false then it's the last argument
        $link = str_replace(substr($link, $pos1, $pos2), $f . $repl[$key], $link);
    }else{
        $link = str_replace(substr($link, $pos1), $f . $repl[$key], $link);
    }
}

echo $link;

https://3v4l.org/1VZiq

您可以根据您提供的示例使用它来完成此工作

(?<==).*?(?=&)|(?<==).*$
  • (?<==) -积极向后看。 匹配=
  • .*? -匹配除换行以外的所有内容。
  • (?=&) -匹配&
  • | -与逻辑或相同。
  • (?<==) -积极向后看。 匹配=
  • .*$ -匹配除换行符以外的所有内容,直到字符串末尾。

演示版

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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