假设我有以下代码:
$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 :(得分: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
字后面没有'匹配时才会匹配!{'
答案 1 :(得分:1)
你需要一个正则表达式:
echo preg_replace("/Hello([^!])/", "Bye$1", $string);
[]
是一个字符类,^
表示NOT。所以Hello
后面没有!
。在[{1}}中捕获()
之后的!
,以便您可以在替换为Hello
(第一个捕获组)中使用它。