【问题标题】:preg_replace is replacing matches including content contained withinpreg_replace 正在替换匹配项,包括其中包含的内容
【发布时间】:2014-09-22 06:40:58
【问题描述】:

我正在使用 preg_replace 将 HTML 注释标记替换为空白,但它似乎将整个 HTML 注释替换为空白。

    echo preg_replace('/<!--(.*?)-->/','',$r->pageCont);

其中 $r->pageCont 是包含 HTML 的数据库条目,例如:

    <div class="col-lg-12">
    <p>The year is:</p>
    <!-- <?php echo date(Y); ?> -->
    </div>

在上面的示例中,HTML 注释标签将被删除,只留下 PHP 代码来回显年份。就像我说的那样,正在发生的事情是整个 HTML 注释都被删除了。

有人可以推荐使用的模式吗?非常感谢您的意见。

编辑:更新问题以反映我正在使用的代码。

【问题讨论】:

  • preg_replace('/&lt;!--(.*?)--&gt;/','',$str);
  • @AvinashRaj 我尝试将运算符更改为 .*?和 .+ 但无济于事。
  • @Tim 发布您的确切输入。
  • 参见此处regex101.com/r/sT0fL2/1 您的正则表达式仅删除注释行。您想用&lt;?php echo date(Y); ?&gt; 替换&lt;!-- &lt;?php echo date(Y); ?&gt; --&gt; 吗?如果是,那么您的替换字符串将是$1。见regex101.com/r/sT0fL2/2

标签: php regex


【解决方案1】:

您似乎正试图用其中的 php 代码替换注释行。如果是,那么您需要将替换字符串设置为 $1,以便它引用组索引 1。

echo preg_replace('/<!--(.*?)-->/', '$1', $r->pageCont);

DEMO

【讨论】:

  • 感谢您的帮助。然而,虽然它确实通过剥离 HTML 注释标签解决了我的目标,但它并没有解决我在 HTML cmets 中执行 PHP 代码的目标。
  • 我认为这解决了当前的问题。如果您有任何其他疑问,请作为另一个问题提出。
猜你喜欢
  • 2016-10-06
  • 2019-01-17
  • 1970-01-01
  • 1970-01-01
  • 2022-10-25
  • 1970-01-01
  • 2017-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多