用于匹配Liquid模板中的标签的正则表达式:">"在html标签内

时间:2017-05-04 08:48:52

标签: regex preg-replace liquid

我必须在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与上面的代码匹配,直到第一个>。我需要一个匹配整个标签的模式。

1 个答案:

答案 0 :(得分:0)

尝试:

/<body(.[^>{}]*(?:{+[^}]*}+[^>{}]*)*)>/s

See demo

正则表达式使用[^>]*代替[^>{}]*(?:{+[^}]*}+[^>{}]*)*,而不是>{}匹配任何字符。在某些时候,它可以满足{,因此它匹配{+something}+的整个内容,然后再次[^>{}]*。使用上一个*重复此技巧多次。