Php 如何用preg_replace替换两个子字符串?

Php 如何用preg_replace替换两个子字符串?,php,preg-replace,preg-replace-callback,Php,Preg Replace,Preg Replace Callback,我想将两个子字符串相互替换,如下所示 $str = 'WORD1 some text WORD2 and we have WORD1.'; $result = 'WORD2 some text WORD1 and we have WORD2.'; 我用preg_replace来匹配替换词 $result = preg_replace('/\bWORD1(?=[\W.])/i', 'WORD2', $str); 但是,如何将原始$str中的WORD2更改为WORD1 问题是更换工作应该同时进

我想将两个子字符串相互替换,如下所示

$str = 'WORD1 some text WORD2 and we have WORD1.';

$result = 'WORD2 some text WORD1 and we have WORD2.';
我用preg_replace来匹配替换词

$result = preg_replace('/\bWORD1(?=[\W.])/i', 'WORD2', $str);
但是,如何将原始$str中的WORD2更改为WORD1

问题是更换工作应该同时进行。否则,更改为word2的word1将再次更改为word1

如何同时进行替换?

您可以使用preg\u replace\u回调:

如果单词是Unicode字符串,还可以添加u修饰符“~\b?:WORD1 | WORD2\b~u”

\b?:WORD1 | WORD2\b模式将WORD1或WORD2作为整个单词进行匹配,然后,在用作替换参数的匿名函数中,您可以检查匹配值并为每种情况应用自定义替换逻辑

您可以使用preg\u replace\u回调:

如果单词是Unicode字符串,还可以添加u修饰符“~\b?:WORD1 | WORD2\b~u”

\b?:WORD1 | WORD2\b模式将WORD1或WORD2作为整个单词进行匹配,然后,在用作替换参数的匿名函数中,您可以检查匹配值并为每种情况应用自定义替换逻辑

另一种方式

如果使用中间字符,则可以逐步替换。我也更喜欢preg_replace_回调,只是想说明我的意思:

$str = 'WORD1 some text WORD2 and we have WORD1.';

$w1 = "WORD1";
$w2 = "WORD2";

$interChr = chr(0);
$str = str_replace($w1, $interChr, $str);
$str = str_replace($w2, $w1, $str);
$str = str_replace($interChr, $w2, $str);

echo $str;
// WORD2 some text WORD1 and we have WORD2.
另一种方式

如果使用中间字符,则可以逐步替换。我也更喜欢preg_replace_回调,只是想说明我的意思:

$str = 'WORD1 some text WORD2 and we have WORD1.';

$w1 = "WORD1";
$w2 = "WORD2";

$interChr = chr(0);
$str = str_replace($w1, $interChr, $str);
$str = str_replace($w2, $w1, $str);
$str = str_replace($interChr, $w2, $str);

echo $str;
// WORD2 some text WORD1 and we have WORD2.
strtr$str,['WORD1'=>'WORD2','WORD2'=>'WORD1'];strtr$str,['WORD1'=>'WORD2','WORD2'=>'WORD1'];