[英]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_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
您还可以使用更基本的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;
您可以根据您提供的示例使用它来完成此工作
(?<==).*?(?=&)|(?<==).*$
(?<==)
-积极向后看。 匹配=
。 .*?
-匹配除换行以外的所有内容。 (?=&)
-匹配&
。 |
-与逻辑或相同。 (?<==)
-积极向后看。 匹配=
。 .*$
-匹配除换行符以外的所有内容,直到字符串末尾。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.