php - 如何从 HTML 注释标签中删除缩进或空格?

标签 php html regex string preg-replace

这是我的代码:

$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}

我的问题是,为什么它不能删除当前行前面的其他空间?

最佳答案

\s 包括换行符,您想使用 \h 代替水平空格并且不要转义正则表达式中的所有字符,它变得不可读:

$html = <<<EOD
    <!--{hello}-->
    <div class="novalue">
        <a>URL</a>
    </div>
    <!--{/hello}-->
EOD;

echo preg_replace('#\h*<!--({.+?})-->#', '$1', $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

关于php - 如何从 HTML 注释标签中删除缩进或空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56207892/

相关文章:

PHP:从字符串中的 URL 中删除 'WWW'

c# - 字符串不应以 !或 = 正则表达式

php - 在不同条件下对单表中的 2 列数据求和

php - 如何将 Bootstrap Carousel 图像标题放置在 carousel div 之外?

javascript - 不能多次使用 Web 组件

javascript - 如何让 <table> 保持固定高度? Bootstrap 4

javascript - 函数 'onclick' 只工作一次

regex - Postgresql 正则表达式匹配大写字母,支持 Unicode

c# - Regex.Replace 行为异常

javascript 或 php 函数在文本的开头和结尾添加一些内容