我想模仿(重现)Expression Engine的奇妙模板解析方法。 (请不要问我为什么不使用它:))
虽然我能够找到并解析像
这样的简单标签{example_param = "param_value"}
我无法解析添加结束标记的标签:
{cyclic_param}
...
{/cyclic_param}
这是我正在使用的模式:
'/[\{^\/](.*)\}/iU'
但它也会返回{/ cyclic_param}。
我知道那里有数以万计的正则表达式导师,但这是我无法理解的事情:((我无法从EE的来源中找到答案)
如何使用PHP的regexp找到开始和结束标记(以及它们的内部块)?
感谢您的帮助!
答案 0 :(得分:1)
preg_match('~{(\w+)}(.+?){/\1}~s', $r, $m);
内容将在$ m [2]。
这不会处理嵌套。
/ edit:完整示例
$text = "
foo {single1=abc}
bar {double1} one {/double1}
foo {single2=def}
bar {double2} two {/double2}
";
$tag = '~
{(\w+)}(.+?){/\1}
|
{(\w+)=(.+?)}
~six';
preg_match_all($tag, $text, $m, PREG_SET_ORDER);
foreach($m as $p) {
if(isset($p[3]))
echo "single $p[3] with param $p[4]\n";
else
echo "double $p[1] with content $p[2]\n";
}
答案 1 :(得分:0)
我认为这适合你:
'/\{[^\/]*\}/iU'