Строка заменяет без учета регистра точные совпадения из массива слов - PullRequest
3 голосов
/ 18 августа 2011

В PHP у меня есть массив слов, которые я хотел бы найти и заменить точными совпадениями без учета регистра в строке. Пример:

$pattern = array("base", "all");
$str = "first base baseball for all";

$str = str_ireplace($pattern, "FOUND", $str);
echo $str;

Выходы: первый НАЙДЕН НАЙДЕН НА НАЙДЕ
Ожидаемый: первый НАЙДЕННЫЙ бейсбол для НАЙДЕННОГО

Я не хочу, чтобы слово «бейсбол» заменялось, потому что я хотел бы заменить только целые слова. Есть ли способ сделать это?

1 Ответ

11 голосов
/ 18 августа 2011

Используйте для этого preg_replace() вместо str_ireplace(), поскольку вы можете определять границы слов в регулярном выражении.

$str = "first base baseball for all";
$pattern = '/\b(base|all)\b/i';
$str = preg_replace($pattern, "FOUND", $str);

echo $str;
// first FOUND baseball for FOUND

Если вы начинаете с массива, вы можете сделать это для построения регулярного выражения из массива:

$words = array('base','all');
// implode() words into a pipe-delimited string
$pattern = '/\b(' . implode("|", $words) . ')\b/i';
$str = preg_replace($pattern, "FOUND", $str);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...