我使用regex <@(.+?)@>
来匹配模式,例如:
<@set:template default.spt @>
它工作得很好,但我遇到过需要嵌套模式的情况,例如:
<@set:template <@get:oldtemplate @> @>
我没有得到父对(<;@和@>;),而是得到以下结果:
<@set:template <@get:oldtemplate @>
我不希望它得到一个子,我只希望在所有嵌套的情况下得到最外层的父。我如何修复我的正则表达式,使它能为我做这件事?我想如果我知道如何要求每个<@
在父级内部都有一个@>
,我就可以这样做,但我不知道如何强制这样做。你知道吗
你所描述的是一种“非正规语言”。它不能用regexp解析。你知道吗
好的,如果您愿意对嵌套级别进行限制,那么从技术上讲,您可以使用regexp来实现它。但这会很难看。你知道吗
如果您可以在标记中设置不包含@的条件,下面是如何使用一些(增加的)最大嵌套深度来解析您的东西:
如果不能禁止标记中的lone@,则必须用如下内容替换
[^@]
的每个实例:(?:[^<@]|<[^@]|@[^>])
。你知道吗考虑一下这个问题,然后考虑扩展regex以解析多达10个深度的嵌套。你知道吗
在这里,我会为你做:
我希望我的回答表明,regexp不是解析语言的正确工具。传统的lexer(标记器)和解析器组合将做得更好,速度明显更快,并将处理不确定的嵌套。你知道吗
我不认为用正则表达式可以做到这一点,请看this question的答案,它提出了类似的问题。regex不足以处理任意级别的嵌套,如果只有两个级别的嵌套,那么这应该是可能的,但是regex可能不是最好的工具。你知道吗
相关问题 更多 >
编程相关推荐