我必须在Liquid模板中为body标签写一个匹配模式。
虽然匹配HTML标签非常简单,但我遇到的问题是可以在Liquid代码中使用HTML特殊字符。 示例:
<body class="template-{{ template | replace: '.', ' ' | truncatewords:
1, '' }}{% if promo %}has-promo{% endif %} {% if products.size > 1
%}has-related-products{% endif %} {% if settings.product-hover ==
'quick-shop' %}has-quick-shop{% endif %} loading" >
或简化:
<body {% bla > 1 %} bla bla>
我的当前匹配模式/<body(.[^>]*)>/s
与上面的代码匹配,直到第一个>
。我需要一个匹配整个标签的模式。
答案 0 :(得分:0)
尝试:
/<body(.[^>{}]*(?:{+[^}]*}+[^>{}]*)*)>/s
正则表达式使用[^>]*
代替[^>{}]*(?:{+[^}]*}+[^>{}]*)*
,而不是>
,{
或}
匹配任何字符。在某些时候,它可以满足{
,因此它匹配{+something}+
的整个内容,然后再次[^>{}]*
。使用上一个*
重复此技巧多次。