正则表达式和重复替换

时间:2013-03-28 17:40:58

标签: php regex preg-replace

请考虑以下代码:

 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

这只是一个例子。请回答一般。

2 个答案:

答案 0 :(得分:0)

试试这个

$new=preg_replace(array('#(\w) (.*) (\w)#','#(.*?) #'),array('{\1}<\2>{\3}','\1><'),$string);

例如,如果你的字符串是'a b b b c',首先是preg_replace,第一个模式为#(\w) (.*) (\w)#,第一个替换'{\1}<\2>{\3}'处理结果为{a}<b b b>{c}的字符串接下来preg_replace带有第二个模式{ {1}}和此过程中的第二个替换'#(.*?) #'流程'\1><'将空格替换为{a}<b b b>{c},现在$ new结果为><

答案 1 :(得分:0)

以下是适合您的代码

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

现场演示:http://ideone.com/gxa3pg