preg_replace所有范围,其内容不起作用

时间:2018-07-15 08:20:57

标签: php preg-replace

此代码中的preg_replcae来自该站点上的另一个答案,应该替换为所有范围和它们的内容,即删除所有范围和它们的内容。但是,为什么它不起作用?

$string = <<<STR
<span>Span 1</span>
<div>DIV 1</div><div class="text">DIV 2</div>
<span> Span 2 </span>
<div class="apache">DIV 3</div>
<span>
Span 3
</span>
<span>
    Span 4
        </span>

STR;

$string = preg_replace("/<span[^>]+\>/is","",$string);

echo $string;

我希望得到的最终结果是:

<div>DIV 1</div><div class="text">DIV 2</div>
<div class="apache">DIV 3</div>
// no spans and their content
// everything else remains

1 个答案:

答案 0 :(得分:0)

[^>]+匹配一个或多个字符,因此<span>将不匹配。在那里使用*。然后,由于您要匹配两者之间的所有内容,因此让我们匹配所有内容(.*?),然后匹配</span>结束标记。 /<span[^>]*>.*?<\/span>/is成为我们最终的正则表达式。

<?php

$string = <<<STR
<span>Span 1</span>
<div>DIV 1</div><div class="text">DIV 2</div>
<span> Span 2 </span>
<div class="apache">DIV 3</div>
<span>
Span 3
</span>
<span>
    Span 4
        </span>

STR;

$string = preg_replace("/<span[^>]*>.*?<\/span>/is","",$string);

echo $string;

您可以在此处查看输出:https://3v4l.org/X9C53