考虑这个文本
$text = 'bla bla bla bla (=abc) bla bla bla bla (=var.var)';
{C}有两个特殊值(=abc)
和(=var.var)
我需要用这个数组中的值替换它们:
$array['abc']='word1';
$array['var.var']='word2';
基本上在模式中是(= [a-z。] +)(字符a-z和点)。
我需要的结果:bla bla bla bla *word1* bla bla bla bla *word2*
(没有*)
我试了这个没有运气
preg_replace('/\(=([a-z\.]+)\)/',"$array['\\1']",$text);
解析错误:语法错误,意外T_ENCAPSED_AND_WHITESPACE,在第9行的D:\ net \ test \ index.php中期待T_STRING或T_VARIABLE或T_NUM_STRING
答案 0 :(得分:3)
由于替换字符串无法从匹配内容中派生(它涉及$array
中的外部数据,因此您需要使用preg_replace_callback
。
此示例假定PHP 5.3为匿名函数,但您可以在任何PHP版本中使用create_function
执行相同操作(以稍微繁琐的方式)。
$text = 'bla bla bla bla (=abc) bla bla bla bla (=var.var)';
$array['abc']='word1';
$array['var.var']='word2';
$result = preg_replace_callback(
'/\(=([a-z\.]+)\)/',
function($matches) use($array) { return $array[$matches[1]]; },
$text);
答案 1 :(得分:2)
< PHP 5.3解决方案:)
$text = 'bla bla bla bla (=abc) bla bla bla bla (=var.var)';
$text = preg_replace_callback('/\(=([\w.]+?)\)/', 'processMatches', $text);
function processMatches($matches) {
$array = array();
$array['abc']='word1';
$array['var.var']='word2';
return isset($array[$matches[1]]) ? $array[$matches[1]] : '';
}
var_dump($text); // string(43) "bla bla bla bla word1 bla bla bla bla word2"