您可以使用正则表达式函数,而不是 plain str_replace
。
函数将查找字符串中所有出现的模式,并在输出数组的第一个元素中返回它们preg_match_all
($pattern, $string, $matches)
$matches
$s = "PRINTER INKT & PAPIER ONE & TWO & THREE";
if (preg_match_all('#\S+(\s&\s\S+)*#', $s, $matches)) {
// $matches[0] - is an array, which contains all parts
print_r($matches[0]);
// to assemble them back into a string, using another delimiter, use implode:
$newstr = implode('>', $matches[0]);
print($newstr); // PRINTER>INKT & PAPIER>ONE & TWO & THREE
}
UPD。
如果您坚持str_replace
只使用,那么您可以应用它两次:第一次 - 将所有空格替换为>
,然后第二次 - 替换>&>
回&
:
$s = "PRINTER INKT & PAPIER ONE & TWO & THREE";
$newstr = str_replace('>&>', ' & ', str_replace(' ', '>', $s));
print ($newstr); // PRINTER>INKT & PAPIER>ONE & TWO & THREE