提问人:Tikboy 提问时间:6/20/2023 最后编辑:M--Tikboy 更新时间:7/1/2023 访问量:91
PHP preg match - 获取所有有效的组标签
PHP preg match - get all valid group tags
问:
例如,我有这个字符串:
{% 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 %}"
基本上,我只想获取一组标签。我在正则表达式中尝试了不同的组合,但我不能选择正确的组合。
答:
-2赞
Hao Wu
6/20/2023
#1
如果你使用的是PHP,你可以尝试使用递归的正则表达式:(?R)
\{%\s*(\w+)\b(?:(?!%}).)*%}(?:(?!\{%)[\s\S]|(?R))*?{%\s*end\1\s*%}
它确保它只捕获最外层的、平衡的和封闭的标记,下面是测试用例: https://regex101.com/r/3JbMQC/1
评论
"/{% div %}.*{% enddiv %}|{% span %}.*{% endspan %}/"