Строка PHP заменяет полное слово

Я хотел бы заменить только полные слова, используя php

Пример: Если у меня есть

$text = "Hello hellol hello, Helloz";

и я использую

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

Новый текст должен выглядеть так

NEW hello1 привет, Helloz

PHP возвращает

NEW привет1 привет, NEWz

Спасибо.


person NVG    schedule 06.08.2010    source источник


Ответы (4)


Вы хотите использовать регулярные выражения. \b соответствует границе слова.

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

Если $text содержит текст UTF-8, вам придется добавить модификатор Unicode "u", чтобы нелатинские символы не были неверно истолкованы как границы слов:

$text = preg_replace('/\bHello\b/u', 'NEW', $text);
person Lethargy    schedule 06.08.2010
comment
Это соответствует свекрови ???? - person Jonny; 15.03.2019
comment
Исправление для вышеуказанного случая может быть здесь: stackoverflow.com/a/39685053/129202 - person Jonny; 15.03.2019

несколько слов в строке заменены этим

    $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;
    Result: Our Members are committed to delivering quality service to both buyers and sellers.
person Sandeep Sherpur    schedule 04.04.2017

Список замены массив: если ваши строки замены заменяют друг друга, вам нужно 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
);

Очевидно / для эффективности /\w+/ можно было бы заменить списком ключей /\b(one|two|three)\b/i.

person mario    schedule 23.11.2017
comment
у вас синтаксическая ошибка, замените последние фигурные скобки скобками preg_replace - person Muhammad Omer Aslam; 24.11.2017
comment
кроме того, if (isset($pairs[$m[0]]) не имеет закрывающей скобки. - person Muhammad Omer Aslam; 24.11.2017
comment
Спасибо. Я искал именно это. - person Interface Unknown; 01.07.2021

Вы также можете использовать библиотеку T-Regx, которая заключает в кавычки $ или \ символы при замене

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