如何在PHP中解析类似于BBCode的伪代码?

时间:2011-01-23 17:38:15

标签: php regex pseudocode

我正在使用包含以下行的模板文件:

[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”属性,有时会遗漏。

解析这些字符串的最简单方便的方法是什么,所以我可以将属性作为关联数组使用?

正则表达式,有限状态机,从[到]得到子串,按空间爆炸并用等号爆炸?

寻找可以使用提供的示例的建议或简单的代码。

1 个答案:

答案 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;
}