此代码中的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
答案 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