stringa PHP sostituire corrispondere parola intera
-
26-09-2019 - |
Domanda
Vorrei sostituire solo parole complete utilizzando PHP
Esempio: Se ho
$text = "Hello hellol hello, Helloz";
e l'uso I
$newtext = str_replace("Hello",'NEW',$text);
Il nuovo testo dovrebbe essere simile
NEW hello1 ciao, Helloz
ritorna PHP
NEW hello1 ciao, Newz
Grazie.
Soluzione
Si desidera utilizzare le espressioni regolari. Il \b
corrisponde a un limite di parola.
$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);
Altri suggerimenti
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;
Array la sostituzione: Nel caso in cui le stringhe di sostituzione stanno sostituendo l'altro, è 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 /\w+/
efficienza potrebbe essere sostituito con una chiave-list /\b(one|two|three)\b/i
.
È inoltre possibile utilizzare libreria T-Regx , che le quotazioni $
o caratteri \
durante la sostituzione
<?php
$text = pattern('\bHello\b')->replace($text)->all()->with('NEW');