我需要一些帮助来为我的php脚本创建一个正则表达式。基本上,我有一个包含我的数据的关联数组,我想使用preg_replace用真实数据替换一些占位符。输入将是这样的:
<td>{{address}}</td><td>{{fixDate}}</td><td>{{measureDate}}</td><td>{{builder}}</td>
我不想使用str_replace,因为数组可能包含的项目比我需要的多得多。
如果我理解正确,preg_replace能够从正则表达式中获取它找到的文本,并将其替换为数组中该键的值,例如
<td>{{address}}</td>
替换为 $ replace ['address'] 的值。这是真的,还是我误读了php文档?
如果确实如此,有人可以帮我看一个正在解析这个问题的正则表达式(如果你也解释它是如何工作的话会很感激,因为我对正则表达式还不是很好)。
非常感谢。
答案 0 :(得分:8)
使用preg_replace_callback()
。它对这类事物非常有用。
$replace_values = array(
'test' => 'test two',
);
$result = preg_replace_callback('!\{\{(\w+)\}\}!', 'replace_value', $input);
function replace_value($matches) {
global $replace_values;
return $replace_values[$matches[1]];
}
基本上这表示查找包含单词字符的{{...}}的所有匹配项,并将该值替换为查找表中的值(作为全局$ replace_values)。
答案 1 :(得分:0)
对于结构良好的HTML / XML解析,请考虑将Document Object Model (DOM)与XPath结合使用。使用它比正则表达式更有趣。
答案 2 :(得分:0)
不必使用全局变量并优雅地处理丢失的密钥,您可以使用
function render($template, $vars) {
return \preg_replace_callback("!{{\s*(?P<key>[a-zA-Z0-9_-]+?)\s*}}!", function($match) use($vars){
return isset($vars[$match["key"]]) ? $vars[$match["key"]] : $match[0];
}, $template);
}