for循环中的preg_replace

时间:2015-07-29 12:11:19

标签: php arrays for-loop preg-replace

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

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

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

print $replaced;

这将返回仅与最后一个数组元素(“w”)一起更改的$ cont文本。我做错了什么?

3 个答案:

答案 0 :(得分:1)

尝试将您的for更改为:

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

答案 1 :(得分:0)

工作示例

$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;

答案 2 :(得分:0)

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

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

更不用说您可以做

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