平衡的正则表达式

技术工作者

因此我开始使用正则表达式,并尝试使用正则表达式匹配以下文本外部 {% tag xyz %}{% endtag %} 标记

{% tag xyz %}
   {% tag abc %}
   {% endtag %}
{% endtag %}

我的正则表达式如下所示,并且到目前为止有效:

({%)\s*(tag)([^%}]*?)(?:\s*(?:(%})((?:(?:[^{%]*?)|(?R))*)(?:({%)\s*(end\2)\s*(%}))))

但是,只要匹配标签内的文本包含单个{%符号,则正则表达式将无法按预期工作。我认为这是因为可能匹配的字符类,或者{%可能是单个字符。我尝试了很多,但最终还是尝试失败,但没有成功。{%

在这个问题上有帮助吗?

我设置了两个regex101链接供您显示问题:

任何帮助,我们都感激不尽!

强尼5

尝试替换[^{%](?:(?!{%).)并添加s(PCRE_DOTALL)标志

通过使用否定的超前行为{这将不会在之后进行%

测试您更新的模式,或者从这里开始尝试:

/{% tag \w+ %}(?:(?:(?!{%).)|(?0))*{% endtag %}/gs

在regex101上测试

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章