替换字符串的指定部分

时间:2012-10-22 10:19:03

标签: php string str-replace

如何使用str_replace方法替换指定部分(在两个子字符串之间)。 例如,

string1="www.example.com?test=abc&var=55";
string2="www.example.com?test=xyz&var=55";

我想将网址中'?------&'之间的字符串替换为?res=pqrs&。还有其他方法吗?

4 个答案:

答案 0 :(得分:2)

您可以使用preg_replace来做到这一点,但这真的是您在这里尝试做的吗?

$str = preg_replace('/\?.*?&/', '?', $input);

如果问题确实是“我想从查询字符串中删除test参数”,那么更强大的替代方法是使用一些字符串操作,parse_urlparse_str和而是http_build_query

list($path, $query) = explode('?', $input, 2);
parse_str($query, $parameters);
unset($parameters['test']);
$str = $path.'?'.http_build_query($parameters);

答案 1 :(得分:1)

由于您使用的是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);

这里和那里可能有一些陷阱;您可能希望满足边缘情况等,但这适用于给定的输入。

答案 2 :(得分:0)

想想regex

<?php
$string = 'www.example.com?test=abc&var=55';
$pattern = '/(.*)\?.*&(.*)/i';
$replacement = '$1$2';
$replaced = preg_replace($pattern, $replacement, $string);
?>

答案 3 :(得分:0)

脏版:

$start = strpos($string1, '?');
$end = strpos($string1, '&');

echo substr($string1, 0, $start+1) . '--replace--' . substr($string1, $end);

更好:

preg_replace('/\?[^&]+&/', '?--replace--&', $string1);

根据您是否要保留?&,正则表达式可以进行编码,但在替换后的字符串中重复它们会更快。