如何从 HTML 评论标签中删除缩进或空格?
How to remove indentations or spaces from HTML comment tags?
这是我的代码:
$template = preg_replace("\s*/\<\!\-\-\{(.+?)\}\-\-\>/s", "{\1}", $template);
以及我要删除评论缩进的 html
:
<!--{hello}-->
<div class="novalue">
<a>URL</a>
</div>
<!--{/hello}-->
我希望它是这样的:
{hello}
<div class="novalue">
<a>URL</a>
</div>
{/hello}
但是,结果是:
{hello}
<div class="novalue">
<a></a>
</div>{/hello}
我的问题是,为什么它不能删除 current 行前面的其他 space?
从正则表达式的开头删除 \s*
。
/\<\!\-\-\{(.+?)\}\-\-\>/s
然后替换为
{}
只要找到一个space comment
就可以循环,然后用str_replace去掉。
循环完成后,只需删除 <!--
部分。
while(strpos($str, ' <!--{hello}-->') !== false){
$str = str_replace(" <!--{hello}-->", "<!--{hello}-->",$str);
$str = str_replace(" <!--{/hello}-->", "<!--{/hello}-->",$str);
}
$str = str_replace(["<!--{hello}-->", "<!--{/hello}-->"], ["{hello}", "{/hello}"],$str);
echo $str;
示例输入:
<!--{hello}-->
<div class="novalue">
<a>URL</a>
</div>
<!--{/hello}-->
<!--{hello}-->
<div class="novalue">
<a>URL</a>
</div>
<!--{/hello}-->
<!--{hello}-->
<div class="novalue">
<a>URL</a>
</div>
<!--{/hello}-->
Returns:
{hello}
<div class="novalue">
<a>URL</a>
</div>
{/hello}
{hello}
<div class="novalue">
<a>URL</a>
</div>
{/hello}
{hello}
<div class="novalue">
<a>URL</a>
</div>
{/hello}
\s
包括换行符,您想使用 \h
代替水平空格并且不要转义正则表达式中的所有字符,它变得不可读:
$html = <<<EOD
<!--{hello}-->
<div class="novalue">
<a>URL</a>
</div>
<!--{/hello}-->
EOD;
echo preg_replace('#\h*<!--({.+?})-->#', '', $html);
输出:
{hello}
<div class="novalue">
<a>URL</a>
</div>
{/hello}
解释:
# # regex delimiter
\h* # 0 or more horizontal spaces
<!-- # literally, begin comment
( # start group 1
{ # opening curly brace
.+? # 1 or more any character, not greedy
} # closing curly brace
) # end group 1
--> # literally, end comment
# # regex delimiter
这是我的代码:
$template = preg_replace("\s*/\<\!\-\-\{(.+?)\}\-\-\>/s", "{\1}", $template);
以及我要删除评论缩进的 html
:
<!--{hello}-->
<div class="novalue">
<a>URL</a>
</div>
<!--{/hello}-->
我希望它是这样的:
{hello}
<div class="novalue">
<a>URL</a>
</div>
{/hello}
但是,结果是:
{hello}
<div class="novalue">
<a></a>
</div>{/hello}
我的问题是,为什么它不能删除 current 行前面的其他 space?
从正则表达式的开头删除 \s*
。
/\<\!\-\-\{(.+?)\}\-\-\>/s
然后替换为
{}
只要找到一个space comment
就可以循环,然后用str_replace去掉。
循环完成后,只需删除 <!--
部分。
while(strpos($str, ' <!--{hello}-->') !== false){
$str = str_replace(" <!--{hello}-->", "<!--{hello}-->",$str);
$str = str_replace(" <!--{/hello}-->", "<!--{/hello}-->",$str);
}
$str = str_replace(["<!--{hello}-->", "<!--{/hello}-->"], ["{hello}", "{/hello}"],$str);
echo $str;
示例输入:
<!--{hello}-->
<div class="novalue">
<a>URL</a>
</div>
<!--{/hello}-->
<!--{hello}-->
<div class="novalue">
<a>URL</a>
</div>
<!--{/hello}-->
<!--{hello}-->
<div class="novalue">
<a>URL</a>
</div>
<!--{/hello}-->
Returns:
{hello}
<div class="novalue">
<a>URL</a>
</div>
{/hello}
{hello}
<div class="novalue">
<a>URL</a>
</div>
{/hello}
{hello}
<div class="novalue">
<a>URL</a>
</div>
{/hello}
\s
包括换行符,您想使用 \h
代替水平空格并且不要转义正则表达式中的所有字符,它变得不可读:
$html = <<<EOD
<!--{hello}-->
<div class="novalue">
<a>URL</a>
</div>
<!--{/hello}-->
EOD;
echo preg_replace('#\h*<!--({.+?})-->#', '', $html);
输出:
{hello}
<div class="novalue">
<a>URL</a>
</div>
{/hello}
解释:
# # regex delimiter
\h* # 0 or more horizontal spaces
<!-- # literally, begin comment
( # start group 1
{ # opening curly brace
.+? # 1 or more any character, not greedy
} # closing curly brace
) # end group 1
--> # literally, end comment
# # regex delimiter