您好我正在写一些用于处理我的观点的内容我需要一个preg_replace,但我似乎无法让它工作,所以我已经废弃了代码。
我试图替换的字符串是基于模板的动态,例如
{{name}} is {{age}} years old
传递给函数的信息是一个数组,例如
array(
'name' => 'John Doe',
'age' => '27'
);
我到目前为止的模式是\{{([a-zA-Z0-9]+)\}}
但是这似乎只匹配一对括号。
我也遇到了在preg_match_all中循环结果的问题..
提前致谢
答案 0 :(得分:1)
...然而,这似乎只与一对大括号相匹配。
你忘记了逃脱第二个{
/\{\{([a-zA-Z0-9]+)\}\}/
-^- -^-
无论如何,试试这个正则表达式,它有点短:
/\{\{([^}]+)\}\}/
答案 1 :(得分:1)
preg_replace_callback
似乎是一个很好的候选人。
$str = "{{name}} is {{age}} years old";
$values = array( 'name' => 'John Doe', 'age' => '27' );
echo preg_replace_callback("/\{{([a-z0-9]+?)\}}/i", function ($result)
use ($values) {
if (isset($result[1])) {
return $values[$result[1]];
}
}, $str);
主要问题是{{[a-z]+}}
将与{{name ... age}}
匹配。使用?
会使+
不情愿,因此它只匹配第一个 }
而不是最后一个。
答案 2 :(得分:1)
为什么不使用sprintf
?
$template = '%s is %d years old';
$vars = array('name' => 'John Doe', 'age' => 27);
$output = sprintf($template, $vars['name'], $vars['age']);