PHP string replace match whole word

2019-01-01 04:44发布

问题:

I would like to replace just complete words using php

Example : If I have

$text = \"Hello hellol hello, Helloz\";

and I use

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

The new text should look like

NEW hello1 hello, Helloz

PHP returns

NEW hello1 hello, NEWz

Thanks.

回答1:

You want to use regular expressions. The \\b matches a word boundary.

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

If $text contains UTF-8 text, you\'ll have to add the Unicode modifier \"u\", so that non-latin characters are not misinterpreted as word boundaries:

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


回答2:

multiple word in string replaced by this

    $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;


回答3:

Array replacement list: In case your replacement strings are substituting each other, you need 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
);

Obviously / for efficiency /\\w+/ could be replaced with a key-list /\\b(one|two|three)\\b/i.



回答4:

You can also use T-Regx library, that quotes $ or \\ characters while replacing

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