如何使用 str_replace 方法替换指定部分(两个子字符串之间)。例如,
string1="www.example.com?test=abc&var=55";
string2="www.example.com?test=xyz&var=55";
我想'?------&'
用?res=pqrs&
. 有没有其他可用的方法?
如何使用 str_replace 方法替换指定部分(两个子字符串之间)。例如,
string1="www.example.com?test=abc&var=55";
string2="www.example.com?test=xyz&var=55";
我想'?------&'
用?res=pqrs&
. 有没有其他可用的方法?
你可以preg_replace
这样做,但这真的是你在这里想要做的吗?
$str = preg_replace('/\?.*?&/', '?', $input);
如果问题真的是“我想test
从查询字符串中删除参数”,那么更强大的替代方法是使用一些字符串操作,或者parse_url
改为:parse_str
http_build_query
list($path, $query) = explode('?', $input, 2);
parse_str($query, $parameters);
unset($parameters['test']);
$str = $path.'?'.http_build_query($parameters);
由于您使用的是 URL,因此您可以先分解 URL,删除您需要的内容并将其重新组合在一起,如下所示:
$string1="www.example.com?test=abc&var=55";
// fetch the part after ?
$qs = parse_url($string1, PHP_URL_QUERY);
// turn it into an associative array
parse_str($qs, $a);
unset($a['test']); // remove test=abc
$a['res'] = 'pqrs'; // add res=pqrs
// put it back together
echo substr($string1, 0, -strlen($qs)) . http_build_query($a);
这里和那里可能有一些陷阱。您可能想要满足边缘情况等,但这适用于给定的输入。
想想正则表达式
<?php
$string = 'www.example.com?test=abc&var=55';
$pattern = '/(.*)\?.*&(.*)/i';
$replacement = '$1$2';
$replaced = preg_replace($pattern, $replacement, $string);
?>
脏版:
$start = strpos($string1, '?');
$end = strpos($string1, '&');
echo substr($string1, 0, $start+1) . '--replace--' . substr($string1, $end);
更好的:
preg_replace('/\?[^&]+&/', '?--replace--&', $string1);
根据您是否要保留?
and &
,可以修改正则表达式,但在替换的字符串中重复它们会更快。