我正在使用包含以下行的模板文件:
[field name="main_div" type='smallblock' required="yes"]
[field type='bigblock' color="red" name="inner_div"]
[field name="btn" type='button' caption='Submit']
与HTML行混合。
根据属性值生成html代码的伪代码。
我有一组有限的属性,但不控制它们在字符串中的顺序以及所有属性的存在。例如,有时会设置“required”属性,有时会遗漏。
解析这些字符串的最简单方便的方法是什么,所以我可以将属性作为关联数组使用?
正则表达式,有限状态机,从[到]得到子串,按空间爆炸并用等号爆炸?
寻找可以使用提供的示例的建议或简单的代码。
答案 0 :(得分:3)
正则表达式 s 。虽然你可以为这样的方案编写一个解析器,但这样做太过分了,并且不会对乱码令牌提供弹性。
诀窍是使用两个正则表达式,一个用于查找[field]
标记,另一个用于分割属性。
preg_replace_callback('/\[(\w+)(\s+\w+=\pP[^"\']*\pP)*\]/', "block", $);
function block($match) {
$field = $match[1];
preg_match_all('/(\w+)=\pP([^"\']+)\pP/', $match[2], $attr);
$attr = array_combine($attr[1], $attr[2]);
// ...
return $html;
}