Preg_replace放置字符串中的所有模式

时间:2014-06-20 21:11:28

标签: php regex string

我有一个类似的:

'Test code {B}{X} we are implementing prototype {T} ,
 using combinations of {U}{A} and {L/W}{F/K}. 

我需要用它的相应代码替换{*}的每个出现,所以我得到的字符串将是:

   'Test code <img src="../B.jpg"><img src="../X.jpg"> 
    we are implementing prototype <img src="../T.jpg"> 
    ,using combinations of <img src="../U.jpg">
    <img src="../A.jpg"> and <img src="../LW.jpg">
    <img src="../FK.jpg">. 

我不想使用str_replace并输入所有组合,因为其中有数千种组合。 $combinations = array("{B}", "{X}", "{W}{X},"{X/W}","{A/L}"..");

所以我使用preg_match_all来查找字符串的所有匹配项。

function findMatches($start, $end, $str){
    $matches = array();
    $regex = "/$start([\/a-zA-Z0-9_]*)$end/";
    preg_match_all($regex, $str, $matches);
    return $matches[1];
}

返回给我,

Array ( [0] => B [1] => X [2] => T [3] => U [4] => A [5] => L/W [6] => F/K ) 

问题是我不需要字母之间的'/',我想我以后可以str_replace。

我的问题是如何使用匹配数组preg_replace并返回完全修改后的字符串而不是数组?

2 个答案:

答案 0 :(得分:3)

我建议使用preg_replace_callback()来实现这一目标。然后,您可以使用str_replace()方法替换回调函数返回的匹配中的正斜杠/

$text = <<<DATA
Test code {B}{X} we are implementing prototype {T} ,
 using combinations of {U}{A} and {L/W}{F/K}. 
DATA;

$text = preg_replace_callback('~{([^}]*)}~', 
      function($m) {
         return '<img src="../' . str_replace('/', '', $m[1]) . '.jpg">';
      }, $text);

echo $text;

Working Demo

答案 1 :(得分:1)

这会让你到达那里,但你还需要一个替换才能删除/

<?php
$input='Test code {B}{X} we are implementing prototype {T} ,
 using combinations of {U}{A} and {L/W}{F/K}.';

$output = preg_replace("/{([^}]*)}/", '<img src="../' . '\\1' . '.jpg">', $input);
echo $output."\n";
?>

输出:

Test code <img src="../B.jpg"><img src="../X.jpg"> we are implementing prototype <img src="../T.jpg"> ,
 using combinations of <img src="../U.jpg"><img src="../A.jpg"> and <img src="../L/W.jpg"><img src="../F/K.jpg">.