2012-10-22 182 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); 

很可能有幾個陷阱在這裏和那裏;你可能想要迎合邊緣情況等,但是這對於給定的輸入是有效的。