如何使用str_replace方法替換指定部分(兩個子字符串之間)。 例如,替換字符串的指定部分
string1="www.example.com?test=abc&var=55";
string2="www.example.com?test=xyz&var=55";
我想在url與?res=pqrs&
取代'?------&'
之間的字符串。還有其他方法嗎?
如何使用str_replace方法替換指定部分(兩個子字符串之間)。 例如,替換字符串的指定部分
string1="www.example.com?test=abc&var=55";
string2="www.example.com?test=xyz&var=55";
我想在url與?res=pqrs&
取代'?------&'
之間的字符串。還有其他方法嗎?
髒版:
$start = strpos($string1, '?');
$end = strpos($string1, '&');
echo substr($string1, 0, $start+1) . '--replace--' . substr($string1, $end);
更好:
preg_replace('/\?[^&]+&/', '?--replace--&', $string1);
根據您是否希望保留?
和&
,正則表達式可以mofidied,但它會更快地重複他們被替換的字符串。
您可以使用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);
思考的regex
<?php
$string = 'www.example.com?test=abc&var=55';
$pattern = '/(.*)\?.*&(.*)/i';
$replacement = '$1$2';
$replaced = preg_replace($pattern, $replacement, $string);
?>
既然你用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);
很可能有幾個陷阱在這裏和那裏;你可能想要迎合邊緣情況等,但是這對於給定的輸入是有效的。
您需要指定詳細信息如何提取部分,如開頭部分,結束部分等。 – jondinham
您想要替換或刪除它? – Baba