指定した部分 (2 つの部分文字列の間) を置き換えるために str_replace メソッドを使用するにはどうすればよいですか。例えば、
string1="www.example.com?test=abc&var=55";
string2="www.example.com?test=xyz&var=55";
'?------&'
URLのの間の文字列を に置き換えたい?res=pqrs&
。他に利用可能な方法はありますか?
指定した部分 (2 つの部分文字列の間) を置き換えるために str_replace メソッドを使用するにはどうすればよいですか。例えば、
string1="www.example.com?test=abc&var=55";
string2="www.example.com?test=xyz&var=55";
'?------&'
URLのの間の文字列を に置き換えたい?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を保持するかどうかに応じて&
、正規表現を変更できますが、置換された文字列でそれらを繰り返す方が高速です。