【发布时间】:2018-07-14 05:50:34
【问题描述】:
在this regex101 demo,我正在尝试获取每个块的内容:
{% block works %}
This works
{% endblock %}
{% block main_block %}
{% block sub_block %}
Does not work
{% endblock %} #ends here
This is not covered
{% endblock %}
如果一个块内部没有块,它可以正常工作,但是在第二个块(main_block)中,它无法匹配其所有内容,因为在里面找到了一个块。
我需要一个捕获 main_block 和 sub_block 块的正则表达式模式,而不是在第一个 {% endblock %} 标记处结束。
现在,我的表情是这样的:\{\%\s*block\s?([a-z0-9\_]*?)\s?\%\}(.*?)(?>(?:{\%\s*block\s?([a-z0-9\_]*?)\s?\%\}|(?R))*\{\%\s?endblock\s?\1?\s?\%\}\is
编辑:我的问题被标记为重复,但我认为这与该问题无关,我的情况不同,块可能无限期地位于块内。
【问题讨论】:
-
您不能单独使用正则表达式捕获每个块内容。但您可以先验证格式,然后通过 PHP 流程。 regex101.com/r/7pauyx/2
-
@KenWhite 示例数据在开头,编辑了问题并添加了正则表达式。谢谢你,抱歉信息不足。
-
看看这个骗子帖子。你必须实现类似的东西
-
@hjpotter92 当前的欺骗甚至间接地没有解决这个问题,Java RegEx 不像 PCRE 不支持递归。