PHP строка заменить соответствует целому слову
Я хотел бы заменить только полные слова, используя php
Пример : Если у меня есть
$text = "Hello hellol hello, Helloz";
И я использую
$newtext = str_replace("Hello",'NEW',$text);
Новый текст должен выглядеть так
НОВЫЙ привет1 привет, привет
PHP возвращает
НОВЫЙ привет1 привет, Ньюз
Спасибо.
27
3 answers
Вы хотите использовать регулярные выражения. \b
соответствует границе слова.
$text = preg_replace('/\bHello\b/', 'NEW', $text);
Если $text
содержит текст UTF-8, вам придется добавить модификатор Юникода "u", чтобы нелатинские символы не были неверно истолкованы как границы слов:
$text = preg_replace('/\bHello\b/u', 'NEW', $text);
54
Author: Lethargy, 2010-09-05 07:37:48
Несколько слов в строке заменены на это
$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;
4
Author: sandeep kumar, 2017-04-04 08:30:39
Массив список замен: В случае, если ваши строки замены заменяют друг друга, вам нужно 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
.
1
Author: mario, 2017-11-23 23:49:28