用于匹配 Liquid 模板中的标签的正则表达式:html 标签内的“>”
Regex for matching a tag in a Liquid template : ">" inside html tag
我必须在 Liquid 模板中为 body 标签编写匹配模式。
虽然匹配 HTML 标签非常简单,但我遇到的问题是 HTML 特殊字符可以在 Liquid 代码中使用。
示例:
<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
匹配上面的代码,直到第一个 >
。我需要一个匹配整个标签的模式。
试试:
/<body(.[^>{}]*(?:{+[^}]*}+[^>{}]*)*)>/s
而不是 [^>]*
正则表达式使用 [^>{}]*(?:{+[^}]*}+[^>{}]*)*
,匹配除 >
、{
或 }
之外的任何字符;在某些时候它可以遇到 {
,因此它匹配 {+something}+
的全部内容,然后再次匹配 [^>{}]*
。这个技巧在最后一个 *
.
中重复了很多次
我必须在 Liquid 模板中为 body 标签编写匹配模式。
虽然匹配 HTML 标签非常简单,但我遇到的问题是 HTML 特殊字符可以在 Liquid 代码中使用。 示例:
<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
匹配上面的代码,直到第一个 >
。我需要一个匹配整个标签的模式。
试试:
/<body(.[^>{}]*(?:{+[^}]*}+[^>{}]*)*)>/s
而不是 [^>]*
正则表达式使用 [^>{}]*(?:{+[^}]*}+[^>{}]*)*
,匹配除 >
、{
或 }
之外的任何字符;在某些时候它可以遇到 {
,因此它匹配 {+something}+
的全部内容,然后再次匹配 [^>{}]*
。这个技巧在最后一个 *
.