所以我抓住正则表达式,尝试使用正则表达式匹配以下文本的外部 {% tag xyz %}{% endtag %}
标记:
{% tag xyz %}
{% tag abc %}
{% endtag %}
{% endtag %}
我的正则表达式如下所示并且到目前为止有效:
({%)\s*(tag)([^%}]*?)(?:\s*(?:(%})((?:(?:[^{%]*?)|(?R))*)(?:({%)\s*(end\2)\s*(%}))))
但是,只要匹配标记内的文本包含单个{
或%
符号,正则表达式就无法按预期工作。我认为这是因为字符类可以匹配{%
而且{
或%
也可以作为单个字符。我尝试了很多并最终尝试和错误,但没有成功。
有关该问题的任何帮助吗?
我为您设置了两个regex101链接以显示问题:
非常感谢任何帮助!
答案 0 :(得分:0)
尝试将[^{%]
替换为(?:(?!{%).)
并添加s
(PCRE_DOTALL)flag:
通过使用否定lookahead,这将允许{
之间没有%
。
测试your updated pattern或其他人开始尝试:
/{% tag \w+ %}(?:(?:(?!{%).)|(?0))*{% endtag %}/gs