PHP chaîne remplacer match mot entier

Je voudrais remplacer juste des mots complets en utilisant php

Exemple : Si j'ai

$text = "Hello hellol hello, Helloz";

Et j'utilise

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

Le nouveau texte devrait ressembler

Nouveau hello1 bonjour, Helloz

PHP renvoie

New hello1 bonjour, NEWz

Merci.

27
demandé sur NVG 2010-08-06 21:37:38

3 réponses

Vous souhaitez utiliser des expressions régulières. Le \b correspond à une limite de mot.

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

Si $text contient du texte UTF-8, vous devrez ajouter le modificateur Unicode "u", afin que les caractères non latins ne soient pas mal interprétés comme des limites de mots:

$text = preg_replace('/\bHello\b/u', 'NEW', $text);
54
répondu Lethargy 2010-09-05 07:37:48

Plusieurs mots dans la chaîne remplacé par ce

    $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;
4
répondu sandeep kumar 2017-04-04 08:30:39

Array liste de remplacement: dans le cas où vos chaînes de remplacement se substituent, vous avez besoin de 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
);

Évidemment / pour l'efficacité /\w+/ pourrait être remplacé par une liste de clés /\b(one|two|three)\b/i.

1
répondu mario 2017-11-23 23:49:28