首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要为模板解析器优化RegEx

问需要为模板解析器优化RegEx
EN

Stack Overflow用户
提问于 2010-10-08 11:41:32
回答 2查看 471关注 0票数 0

大家好,

我需要优化一个RegEx,我使用它来解析我的内容管理系统中的模板标签。标签可以是单个标签,也可以是匹配对。下面是一些标签的示例:

代码语言:javascript
复制
{static:input:title type="input"}

{static:image:picture}<img src="{$img.src}" width="{$img.width}" height="{$img.height"} />{/static:image:picture}

这是我目前拥有的RegEx,它可以正确地选择我需要的内容,但是我通过RegexBuddy调试器运行它,如果HTML页面非常大,它需要数万个步骤才能完成一个匹配。

代码语言:javascript
复制
{static([\w:]*)?\s?(.*?)}(?!"|')(?:((?:(?!{static\1).)*?){/static\1})?

当这与标签匹配时,组1是所有冒号分隔的单词的参数。组2是参数。组3(如果是标签对)是每个标签之间的内容。

当我把这些标签放在我的条件标签中时,我也遇到了问题。类似这样的内容与组2不匹配(组2在下面两个匹配的标签中都应为空):

代码语言:javascript
复制
{if "{static:image:image1}"!=""}
    <a href="{static:image:image1}" rel="example_group" title="Image 1"></a></li>
{/if}

另一种需要工作的情况是,同一个标签在一行中使用了两次,但第一个实例使用了单个标签,第二个实例用作标签对。所以就像这样:

代码语言:javascript
复制
{static:image:picture}
{static:image:picture}<img src="{$img.src}" width="{$img.width}" height="{$img.height"} />{/static:image:picture}

需要有两个不同的匹配。第一个匹配将只有group 1。第二个匹配将有group 1和group 3。

如果有人需要更多信息,请不要犹豫,尽管问。内容管理系统是使用CakePHP框架在PHP中构建的。

向任何能帮助我的人致以巨大的赞誉:D!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-10 20:38:23

我已经想出了一个解决方案,目前效果非常好。我先检查并获取所有成对的标签,然后再获取单个标签。然后,我使用PHP对其他标记内容中的标记进行递归处理。

dogmatic69提出的建议可能是一个更完整的解决方案。

感谢您的建议和可能的解决方案。

票数 0
EN

Stack Overflow用户

发布于 2010-10-08 11:51:14

您的语法对于正则表达式来说太复杂了。你需要一个上下文无关的语法。(请在Chomsky hierarchy上阅读以了解原因。)

我建议使用现有的模板语言(如Smarty),而不是自己发明。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3887548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档