Как заменить несколько параметров URL на регулярное выражение php - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть логическая проблема, так как я не очень часто обрабатываю регулярные выражения.Я хотел бы знать, как я могу заменить несколько значений из одного 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

Но,мне нужно изменить значения «value1» и «external».Параметры никогда не меняются:

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

Спасибо!

Ответы [ 3 ]

0 голосов
/ 15 декабря 2018

Вы можете использовать встроенные функции PHP для разбора URL (parse_url, parse_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

0 голосов
/ 15 декабря 2018

Вы также можете использовать более простой метод 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

0 голосов
/ 15 декабря 2018

Вы можете использовать это в соответствии с примерами, которые вы предоставите, это сделает работу

(?<==).*?(?=&)|(?<==).*$
  • (?<==) - Позитивный взгляд позади.соответствует =.
  • .*? - соответствует всему, кроме новой строки.
  • (?=&) - соответствует &.
  • | - чередование такое же, как логическоеИЛИ.
  • (?<==) - Позитивный взгляд позади.соответствует =.
  • .*$ - соответствует любой вещи, кроме перевода строки до конца строки.

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...