0

指定した部分 (2 つの部分文字列の間) を置き換えるために str_replace メソッドを使用するにはどうすればよいですか。例えば、

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

'?------&'URLのの間の文字列を に置き換えたい?res=pqrs&。他に利用可能な方法はありますか?

4

4 に答える 4

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);
于 2012-10-22T10:23:11.367 に答える
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);

おそらく、あちこちにいくつかの落とし穴があります。エッジケースなどに対応したい場合がありますが、これは指定された入力で機能します。

于 2012-10-22T10:26:13.723 に答える
0

正規表現を考える

<?php
$string = 'www.example.com?test=abc&var=55';
$pattern = '/(.*)\?.*&(.*)/i';
$replacement = '$1$2';
$replaced = preg_replace($pattern, $replacement, $string);
?>
于 2012-10-22T10:23:58.370 に答える
0

汚いバージョン:

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

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

より良い:

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

?andを保持するかどうかに応じて&、正規表現を変更できますが、置換された文字列でそれらを繰り返す方が高速です。

于 2012-10-22T10:27:33.553 に答える