2012-05-22 76 views
0

我期待提高以下的正则表达式,因为我现在想匹配嵌套的标签,以及:递归标签内容

'%{if:\s*"\'([^\']*)\' == \'([^\']*)\'"}((?:(?!{else}|{/endif}).)*){else}((?:(?!{/endif}).)*){/endif}%sei'

这基本上一致:

{if: "'x' == 'y'"} 
    a 
{else} 
    b 
{/endif} 

{if: "'x' == 'y'"} 
    c 
{/endif} 

不过,我想这是在某种方式递归,所以嵌套状态也可以在不破坏任何内容的情况下进行匹配(如果添加了嵌套语句,此时它会中断)。

有也将是一个类似的表达与!=

我发现这个http://www.devnetwork.net/viewtopic.php?f=38&t=102670&sid=02b7c691a2be894336c694700f8f911a#p551340它匹配<div>标签,虽然有点不知道该如何去适应它适合我的正则表达式...

+0

更多的上下文请。这样做的目的是什么? – Gordon

+0

对不起,我的一些逻辑允许一些最终用户创建一个模板,以显示一个可以自定义的区域。我不希望允许PHP,使所有被剥离出来的安全性是

0

如果限制嵌套一些预定的深度(这可能会或可能不会一个坏主意),你可以将它与正则表达式匹配。否则,你不能。您提供的链接与正则表达式的HTML匹配,这是经常使用的,但通常是known是一个坏主意。如果您不想使用其他形式的解析,请考虑匹配最内层的ifs,替换为某些内容并再次匹配。