preg_replace 在 for 循环中

preg_replace in for loop

我想在一些连词后插入符号。 $cont 变量有一些文本。我的代码:

$conjs = array ('i', 'a', 'w'); 
$size = sizeof($conjs);
$replacm = '  ';

for ($i=0; $i < $size; $i++){
    $pattern = '/\s(' . $conjs[$i] . ')(\s)/';
    $replaced = preg_replace($pattern, $replacm, $cont);
}

print $replaced;

此 returns $cont 文本仅随最后一个数组元素 ("w") 发生变化。我做错了什么?

尝试将您的 for 更改为:

for ($i=0; $i < $size; $i++){
    $pattern = '/\s(' . $conjs[$i] . ')(\s)/';
    $cont= preg_replace($pattern, $replacm, $cont);
}    

工作示例

$cont = 'any text word';
$conjs = array ('i', 'a', 'w'); 
$size = sizeof($conjs);
$replacm = '$';

for ($i=0; $i < $size; $i++){
    $pattern = '/' . $conjs[$i] . '/';    
    $cont= preg_replace($pattern, $replacm, $cont);
}

print $cont;

此方法已存在于 T-Regx tool 中,名为 chainedReplac()

Pattern::compose(['\si(\s)', '\sa(\s)', '\sw(\s)'])->chainedReplace($cont)->with("'&nbsp;");

更不用说你可以做到

Pattern::of('\s[iaw](\s)')->replace($cont)->all()->with('&nbsp;');