【发布时间】:2015-01-16 23:47:15
【问题描述】:
所以我开始使用正则表达式,并尝试使用正则表达式匹配以下文本的 outer {% tag xyz %}{% endtag %} tags:
{% tag xyz %}
{% tag abc %}
{% endtag %}
{% endtag %}
我的正则表达式如下所示并且到目前为止有效:
({%)\s*(tag)([^%}]*?)(?:\s*(?:(%})((?:(?:[^{%]*?)|(?R))*)(?:({%)\s*(end\2)\s*(%}))))
但是,只要匹配标记内的文本包含单个 { 或 % 符号,正则表达式就不会按预期工作。我认为这是因为字符类可能匹配{%,但也可能匹配{ 或% 作为单个字符。我尝试了很多,最终尝试和错误,但没有成功。
对这个问题有帮助吗?
我为您设置了两个 regex101 链接来显示问题:
非常感谢任何帮助!
【问题讨论】:
-
这不是标准正则表达式处理的东西(在一般情况下)。如果您有 PCRE(与 Perl 兼容的正则表达式),并且它们足够兼容,那么您也许可以使用支持嵌套表达式的 Perl 功能,但那些“正则表达式”不再是真正的“正则”。您应该提供更多关于您计划在何处使用此代码的上下文。