考虑以下代码:
echo preg_replace('#(\w) (\w) (\w)#','{\1}<\2>{\3}',$string);
如果$string= 'a b c';
它会产生{a}<b>{c}
. 如何修改它$string='a b b b c'
返回:{a}<b><b><b><b>{c}
那这个呢:a a a b b b c c c
这只是一个例子。请大体回答。
考虑以下代码:
echo preg_replace('#(\w) (\w) (\w)#','{\1}<\2>{\3}',$string);
如果$string= 'a b c';
它会产生{a}<b>{c}
. 如何修改它$string='a b b b c'
返回:{a}<b><b><b><b>{c}
那这个呢:a a a b b b c c c
这只是一个例子。请大体回答。
尝试这个
$new=preg_replace(array('#(\w) (.*) (\w)#','#(.*?) #'),array('{\1}<\2>{\3}','\1><'),$string);
例如,如果您的字符串首先是'a b b b c'
具有第一个模式#(\w) (.*) (\w)#
和第一个替换'{\1}<\2>{\3}'
过程的 preg_replace,则结果是 {a}<b b b>{c}
下一个具有第二个模式的 preg_replace'#(.*?) #'
和第二个替换'\1><'
过程 {a}<b b b>{c}
在此过程中替换空间的字符串><
现在 $new 结果是{a}<b><b><b>{c}
。
这是应该为您工作的代码
$str='a a a b b b c c c';
$regex = array('/\b(a)\b\s*/', '/\b(b)\b\s*/', '/\b(c)\b\s*/');
$repl = array('{\1}', '<\1>', '{\1}');
$nstr = preg_replace($regex, $repl, $str);
echo "$nstr\n";
// OUTPUT: {a}{a}{a}<b><b><b>{c}{c}{c}