2012-10-22 185 views
0

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

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

我想在url与?res=pqrs&取代'?------&'之间的字符串。还有其他方法吗?

+0

您需要指定详细信息如何提取部分,如开头部分,结束部分等。 – jondinham

+0

您想要替换或删除它? – Baba

回答

0

脏版:

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

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

更好:

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

根据您是否希望保留?&,正则表达式可以mofidied,但它会更快地重复他们被替换的字符串。

2

您可以使用preg_replace来做到这一点,但这真的是你想要做的吗?

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

如果真正的问题是“我想删除从查询字符串的test参数”,那么一个更强大的替代方法是使用一些字符串操作,parse_urlparse_strhttp_build_query来代替:

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

思考的regex

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

既然你用URL的工作,你可以DECOM首先提出的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); 

很可能有几个陷阱在这里和那里;你可能想要迎合边缘情况等,但是这对于给定的输入是有效的。