2010-08-06 14 views
25

Vorrei sostituire le parole appena complete utilizzando phpPHP stringa di sostituire partita intera parola

Esempio: Se ho

$text = "Hello hellol hello, Helloz"; 

e io uso

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

Il nuovo testo dovrebbe assomigliare allo

NUOVO ciao1 inferno o, Helloz

PHP restituisce

NUOVO hello1 ciao, Newz

Grazie.

risposta

48

Si desidera utilizzare le espressioni regolari. Lo \b corrisponde a un limite di parole.

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

Se $text contiene testo UTF-8, si dovrà aggiungere il modificatore Unicode "u", in modo che i caratteri non latini non vengono male interpretate come confini di parola:

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

parola multipla nella stringa sostituita dalla 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 elenco di sostituzione: Nel caso in cui le stringhe di ricambio si sostituiscano a vicenda, è necessario 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 
); 

Ovviamente/per l'efficienza /\w+/ potrebbe essere sostituito con una chiave-list /\b(one|two|three)\b/i.

+0

si ha un errore di sintassi, sostituire le ultime parentesi con parentesi di 'preg_replace' –

+0

anche, il' if (isset ($ pairs [$ m [0]]) 'non ha la parentesi di cosing. –

+0

riprendendo il mio - 1 voto questo sembra buono ora –

Problemi correlati