regex PHP preg match -获取所有有效的组标记[已关闭]

2o7dmzc5  于 2023-06-25  发布在  PHP
关注(0)|答案(1)|浏览(93)

已关闭,此问题需要更focused。目前不接受答复。
**想改善这个问题吗?**更新问题,使其仅通过editing this post关注一个问题。

3天前关闭。
Improve this question
例如,我有这个字符串:

{% if test %}
   random text here
   {% case item %}{% when "hello" %}hi{% else %}goodbye{% endcase %}
   {% if hello %}text here{% else %}new text{% endif %}
random text here
{% endif %}
{% case item %}{% when "hello" %}hi{% else %}goodbye{% endcase %}

然后使用“preg_match_all”,我会得到这样的结果:

[0] => "{% if test %}random text here{% case item %}{% when "hello" %}hi{% else %}goodbye{% endcase %}{% if hello %}text here{% else %}new text{% endif %}random text here{% endif %}"
[1] => "{% case item %}{% when "hello" %}hi{% else %}goodbye{% endcase %}"

基本上,我只是想得到一组标签。我尝试了不同的组合在正则表达式,但我不能正确的。

5lhxktic

5lhxktic1#

如果你使用PHP,你可以使用递归(?R)来尝试这个正则表达式:

\{%\s*(\w+)\b(?:(?!%}).)*%}(?:(?!\{%)[\s\S]|(?R))*?{%\s*end\1\s*%}

它确保它只捕获最外层的、平衡的和封闭的标签,下面是测试用例:https://regex101.com/r/3JbMQC/1

相关问题