Reemplazar solo coincidencias de palabras completas en una cadena [duplicado]

Resuelto NVG asked hace 54 años • 4 respuestas

Me gustaría reemplazar sólo palabras completas usando php

Ejemplo: si tengo

$text = "Hello hellol hello, Helloz";

y yo uso

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

El nuevo texto debería verse así

NUEVO hola1 hola, Holaz

PHP regresa

NUEVO hola1 hola, NUEVOz

Gracias.

NVG avatar Jan 01 '70 08:01 NVG
Aceptado

Quieres utilizar expresiones regulares. El \bcoincide con el límite de una palabra.

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

Si $textcontiene texto UTF-8, tendrás que agregar el modificador Unicode "u", para que los caracteres no latinos no se malinterpreten como límites de palabras:

$text = preg_replace('/\bHello\b/u', 'NEW', $text);
Lethargy avatar Aug 06 '2010 17:08 Lethargy

varias palabras en una cadena reemplazadas por esta

    $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.
Sandeep Sherpur avatar Apr 04 '2017 08:04 Sandeep Sherpur

Lista de reemplazo de matrices : en caso de que las cadenas de reemplazo se sustituyan entre sí, necesitará 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
);

Obviamente, / por eficiencia /\w+/podría reemplazarse con una lista de claves /\b(one|two|three)\b/i.

mario avatar Nov 23 '2017 17:11 mario