2011-01-23 77 views
2

我与含有这样的诗句模板文件的工作:如何在PHP中解析类似于BBCode的伪代码?

[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”属性,有时会被忽略。

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

正则表达式,有限状态机,从[to]获取子串,按空间爆炸并以等号爆炸?

寻找建议或简单的一段代码,可以使用提供的例子。

回答

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; 
} 
+0

我想,你忘了这里+,是:([^“\'] +) – 2011-01-23 19:39:32