2017-02-20 16 views
0

Скажем, у меня есть следующий код: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, чтобы сделать это?

ответ

2

Вам нужно регулярное выражение:

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

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

2

Решение с использованием 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 слова, только если это не следует