2010-08-06 20 views
25

me gustaría sustituir sólo palabras completas utilizando phpPHP cadena sustituir toda coincidencia de palabra

Ejemplo: Si tengo

$text = "Hello hellol hello, Helloz"; 

y utilizo

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

El nuevo texto debería mira como

NUEVO hello1 hell O, Helloz

PHP vuelve

NUEVO hello1 hola, newz

Gracias.

Respuesta

48

Quiere usar expresiones regulares. El \b coincide con un límite de palabras.

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

Si $text contiene texto UTF-8, que tendrá que añadir el modificador Unicode "U", de modo que los caracteres no latinos no son mal interpretados como límites de las palabras:

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

palabra múltiple en cadena sustituida por la presente

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

Array lista de reemplazo: en caso de que sus cadenas de reemplazo se sustituyan entre sí, necesita 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//\w+/ para la eficiencia podría ser reemplazado con una lista de claves /\b(one|two|three)\b/i.

+0

tiene un error de sintaxis, reemplace las últimas llaves por paréntesis de 'preg_replace' –

+0

también,' if (isset ($ pairs [$ m [0]]) 'no tiene el paréntesis de cálculo de costos. –

+0

recuperando mi - 1 voto, esto se ve bien ahora –

Cuestiones relacionadas