preg_replace 所有 span 和它们的内容什么都没有不起作用
preg_replace all spans and their content with nothing does not work
此代码中的 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
[^>]+
匹配一个或多个字符,因此 <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
此代码中的 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
[^>]+
匹配一个或多个字符,因此 <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