web-dev-qa-db-ger.com

PHP Zeichenfolge ersetzt das ganze Wort

Ich möchte nur komplette Wörter mit PHP ersetzen

Beispiel: .__ Wenn ich 

$text = "Hello hellol hello, Helloz";

und ich benutze

$newtext = str_replace("Hello",'NEW',$text);

Der neue Text sollte so aussehen

NEU hallo1 hallo Helloz

PHP kehrt zurück

NEU Hallo1 Hallo, NEWz

Vielen Dank.

27
NVG

Sie möchten reguläre Ausdrücke verwenden. Der \b stimmt mit einer Word-Grenze überein.

$text = preg_replace('/\bHello\b/', 'NEW', $text);

Wenn $text UTF-8-Text enthält, müssen Sie den Unicode-Modifikator "u" hinzufügen, damit nicht lateinische Zeichen nicht als Word-Grenzen falsch interpretiert werden:

$text = preg_replace('/\bHello\b/u', 'NEW', $text);
56
Lethargy

mehrere Wörter im String werden durch diese ersetzt

    $String = 'Team Members are committed to delivering quality service for all buyers and sellers.';
    echo $String;
    echo "<br>";
    $String = preg_replace(array('/\bTeam\b/','/\bfor\b/','/\ball\b/'),array('Our','to','both'),$String);
    echo $String;
5
sandeep kumar

Array - Ersetzungsliste: Wenn sich die Ersetzungszeichenfolgen gegenseitig ersetzen, benötigen Sie preg_replace_callback .

$pairs = ["one"=>"two", "two"=>"three", "three"=>"one"];

$r = preg_replace_callback(
    "/\w+/",                           # only match whole words
    function($m) use ($pairs) {
        if (isset($pairs[$m[0]])) {     # optional: strtolower
            return $pairs[$m[0]];      
        }
        else {
            return $m[0];              # keep unreplaced
        }
    },
    $source
);

Aus Gründen der Effizienz könnte /\w+/ durch eine Schlüsselliste /\b(one|two|three)\b/i ersetzt werden.

1
mario

Sie können auch T-Regx library verwenden, die beim Ersetzen $- oder \-Zeichen zitiert

<?php
$text = pattern('\bHello\b')->replace($text)->all()->with('NEW');
0
Danon