如何在php中替换文本而不需要注意单词之间的空格



我想知道,如何在不影响进程的情况下用其他内容替换文本
("Hi, I'm here!" Will be replaced with "bye"(
像这样(Value ==> ReplacedValue(:

Hi,I'mhere!                  ==>   bye
Hi, I'm here!                ==>   bye
Hi,  I'm here!               ==>   bye
Hi  ,     I'm        here!   ==>   bye

现在使用str_ireplace(str_ireplace("TheOriginalWord", "TheReplacement", $data)(不会做我想要的事情,它会这样做:

Hi, I'm here!                ==>   bye
Hi,  I'm here!               ==>   Hi,  I'm here!
Hi  ,     I'm        here!   ==>   Hi  ,     I'm        here!

使用正则表达式。

preg_replace('/His*,s*I'ms*here!/i', "bye", $data);

s*匹配零个或多个空格。如果只想匹配一个或多个空格,请改用s+

Barmar的答案很好,但如果您需要可重复使用的东西,您可以使用以下函数:

function replace_spaceless(string $subject, string $from, string $to): string
{
$pattern = '/' . preg_replace('/(?<!^)s*bs*(?!$)/', '\s*', preg_quote($from, '/')) . '/';
return preg_replace($pattern, $to, $subject);
}

这基本上是str_replace,只是它忽略了空格。为此,它构建了一个正则表达式,用s*替换所有单词边界(字符串的开头/结尾除外(,并将其传递给preg_replace

演示:https://3v4l.org/o5om1

最新更新