【问题标题】:Regex and repetitive replacment正则表达式和重复替换
【发布时间】:2013-03-28 17:40:57
【问题描述】:

考虑以下代码:

 echo preg_replace('#(\w) (\w) (\w)#','{\1}<\2>{\3}',$string);

如果$string= 'a b c';,它将产生{a}&lt;b&gt;{c}。如何修改$string='a b b b c' return :{a}&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;{c}

这个呢:a a a b b b c c c

这只是一个例子。请笼统地回答。

【问题讨论】:

  • 字符串a a a b b b c c c应该输出什么?
  • @anubhava ‍‍‍‍‍‍‍‍{a}{a}{a}&lt;b&gt;&lt;b&gt;&lt;b&gt;{c}{c}{c}或‍‍‍‍‍‍‍‍{a}{a}{a}&lt;b&gt;&lt;b&gt;&lt;b&gt;(c)(c)(c)

标签: php regex preg-replace


【解决方案1】:

试试这个

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

例如,如果您的字符串是'a b b b c',首先使用第一个模式#(\w) (.*) (\w)# 和第一个替换'{\1}&lt;\2&gt;{\3}' 处理结果为{a}&lt;b b b&gt;{c} 的字符串下一个preg_replace 使用第二个模式'#(.*?) #' 和第二个替换'\1&gt;&lt;'在这个过程中处理{a}&lt;b b b&gt;{c}&gt;&lt; 替换空格现在$new 结果是{a}&lt;b&gt;&lt;b&gt;&lt;b&gt;{c}

【讨论】:

  • 你能解释一下你的答案吗?
  • @PHPst 查看答案。我试着用例子来解释,希望对你有所帮助
【解决方案2】:

这是应该为您工作的代码

$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

【讨论】:

    猜你喜欢
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 2012-06-17
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多