【发布时间】:2011-05-18 14:28:10
【问题描述】:
您好,我正在处理 CMS 中的一个错误,我希望有人可以帮我解决这个混乱的正则表达式!我需要删除 {{page? }} 标签(其中 'page' 是一个动态词),包括其中的任何嵌套 {{tags}}。- 除了 {{links? }}
在下面的代码中,正则表达式应该删除 {{homepage? }} 标签:
<div id="main">
<div id="left">
{{menu1}}<br />
{{homepage?
<img src="images/{{timenow}}.gif" width="177" height="217" alt="{{imgname}}" id="biglogo" />
}}
{{links?
<b>LINKS</b>
}}
</div>
{{menu2}}
</div>
这是我目前所拥有的。一看到timenow}}就卡住了
$result=preg_replace("#\{\{(?!links)\S*?\?.*?}}#s","",$result);
澄清:
没有 {{page? }} 子标签(所有子标签都是 {{thisformat}} )。
换句话说:{{foo? {{links? bar }} baz }} 永远不会发生。
【问题讨论】:
-
什么
{{page? }}标签?你是说{{homepage? ... }}?您真的要删除除链接标签之外的所有标签吗?{{foo? {{links? bar }} baz }}会发生什么?或者你只是想获取链接标签的内容? -
这可能很简单,使用
(?R)语法的递归正则表达式。在您的情况下,您可能会逃脱:"#\{\{(?!links)\w+\?((?R)|.)*}}#s"- 但应该将.重写为更具体的内容。 -
Sorry @Qtax by
{{page? }}我的意思是页面是动态的(可以是主页、链接、联系人等任何单个单词)。没有{{页面? }} 子标签(所有子标签都是 {{thisformat}} )所以你的例子永远不会出现。 @mario - 看起来很有希望。我会全力以赴并报告。