我有一个类似的:
'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并返回完全修改后的字符串而不是数组?
答案 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;
答案 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">.