複数のアイテムのStr_replace


115

以前これを行ったことを覚えていますが、コードが見つかりません。次のようにstr_replaceを使用して1つの文字str_replace(':', ' ', $string);を置き換えます\/:*?"<>|。ただし、str_replaceをそれぞれ実行せずに、次のすべての文字を置き換えます。


2
これらすべての文字をスペースに置き換えたいですか?
ゼウス書2011

7
php.netの優れたマニュアルを参照し、paramsセクションを確認して、必要なものが可能かどうかを確認してください。
マイクB

回答:


117

str_replace() 配列を取ることができるので、次のことができます:

$new_str = str_replace(str_split('\\/:*?"<>|'), ' ', $string);

または、次のように使用できますpreg_replace()

$new_str = preg_replace('~[\\\\/:*?"<>|]~', ' ', $string);

2
OPがバックスラッシュを置き換える必要があることを意味すると仮定すると、そのpreg_replaceパターンは機能しませんでした。バックスラッシュを期待どおりに機能させるには、パターンで4つ(つまり "\\\\")を使用する必要がありました。
GreenMatt 2011

1
良い答えです。@ dogbertの回答を追加すると、マニュアルを読んでいない人やstr_splitが配列を返すことに気付いていない人にとっては完全な回答になります。
Bradmage 2015

利点何str_replace()オーバーpreg_replace()OPの場合(またはその逆)は?
ludditedev

1
@ludditedevどちらの方法でも本当の利点はありません。それは好みの問題です
NullUserException

1
@MadhurBhaiya正規表現を次のように変更します'~[\\+><-]~'(どこにあるかに注意してください-)。ダッシュ(-)は正規表現のメタ文字であるため、エスケープするか、戦略的に文字クラス(内のすべてのもの[])に配置する必要があります。この回答を参照してください:stackoverflow.com/a/7604888/396458
NullUserException

179

このような:

str_replace(array(':', '\\', '/', '*'), ' ', $string);

または、最新のPHP(5.4以降)では、少し簡潔さを欠いています。

str_replace([':', '\\', '/', '*'], ' ', $string);

72

たとえば、search1をreplace1に、search2をreplace2に置き換える場合、次のコードが機能します。

print str_replace(
    array("search1","search2"),
    array("replace1", "replace2"),
    "search1 search2"
);

//出力:replace1 replace2




2

preg_replace()を使用できます。次の例は、コマンドラインphpを使用して実行できます。

<?php
$s1 = "the string \\/:*?\"<>|";
$s2 = preg_replace("^[\\\\/:\*\?\"<>\|]^", " ", $s1) ;
echo "\n\$s2: \"" . $s2 . "\"\n";
?>

出力:

$ s2: "文字列"


キャラクタークラス内のエスケープが多すぎます。(承認された回答を参照)
mickmackusa

0

HTMLタグを2つの異なる置換結果に置き換えなければならない状況がありました。

$trades = "<li>Sprinkler and Fire      Protection Installer</li>
<li>Steamfitter </li>
<li>Terrazzo, Tile and Marble      Setter</li>";

$s1 =  str_replace('<li>', '"', $trades);

$s2 = str_replace('</li>', '",', $s1);

echo $s2;

結果

「スプリンクラーと防火インストーラー」、「スチームフィッター」、「テラゾー、タイルと大理石のセッター」、


0

私はあなたがこの世話をしていると思います:

// example
private const TEMPLATE = __DIR__.'/Resources/{type}_{language}.json';

...

public function templateFor(string $type, string $language): string
{
   return \str_replace(['{type}', '{language}'], [$type, $language], self::TEMPLATE);
}

0

私の使用例では、HTMLドキュメントの一部のフィールドをパラメーター化し、これらのフィールドを読み込んだら、str_replaceメソッドを使用してそれらを照合し、置き換えます。

<?php echo str_replace(array("{{client_name}}", "{{client_testing}}"), array('client_company_name', 'test'), 'html_document'); ?>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.