строка — PHP str_replace; проверить больше, чем заменить часть

Допустим, у меня есть следующий код:

$string = "Hello! This is a test. Hello this is a test!"
echo str_replace("Hello", "Bye", $string);

Это заменит все Hello в $string с Bye, Как я могу, например, исключить все, где есть ! после Hello,

Значит, я хочу этот вывод: Hello! This is a test. Bye this is a test!

Есть ли способ в php сделать это?

0

Решение

Вам понадобится регулярное выражение:

echo preg_replace("/Hello([^!])/", "Bye$1", $string);

[] это класс персонажа и ^ значит нет. Так Hello НЕ сопровождается !, Захват в () НЕ ! это после Hello так что вы можете использовать его в качестве замены $1 (первая группа захвата).

1

Другие решения

Решение с использованием preg_repalce функция с определенным шаблоном регулярных выражений:

$string = "Hello! This is a test. Hello this is a test!";
$result = preg_replace("/Hello(?!\!)/", "Bye", $string);

print_r($result);

Выход:

Hello! This is a test. Bye this is a test!

(?!\!) — ожидаемое отрицательное утверждение, совпадения Hello слово только если за ним НЕ следует «!»

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector