在php中删除带有正则表达式的span标签

时间:2015-04-12 17:33:14

标签: php regex laravel

我需要一个删除span标签的正则表达式,例如,如果我们有:

<span class="something"><strong>Hello</strong></span>

输出应为:

<strong>Hello</strong>

3 个答案:

答案 0 :(得分:2)

preg_replace('/<span[^>]+?[^>]+>|</span>/i','',$string)

答案 1 :(得分:1)

我通过这样做解决了它

 $tag = 'span';
     $result = preg_replace('#</?'.$tag.'[^>]*>#is', '', $string);

答案 2 :(得分:0)

php中,如果要从字符串中删除某些内容,请尽可能使用内置函数,例如

  • strip_tags()用于从字符串中删除所有html标签,
  • htmlentities()将所有适用的字符转换为HTML实体,例如 Hello <b>Hello</b>,它将按原样打印html文本(我在下面的示例中已使用过)。

但是,如果您想要不同于此处的基本操作(仅从html文本中删除span标签),则必须使用preg_replace。 以下是我使用preg_replace()

的解决方案
$string_without_span_tag = preg_replace('/<span[^>]+\>|<\/span>/i', '', $string_with_span_tag); 
echo htmlentities($string_without_span_tag);

//$string_with_span_tag = '<span class="something"><strong><span style="color:red;">Hello</span></strong></span>';
//output after using above regex: <strong>Hello</strong>

@Zdimitriv的答案也可以使用,因此您也可以使用它,但是如果您使用@mcklayin的答案,请当心,我没有在laravel中进行测试,但是在核心php中,答案会为您提供错误信息:

Warning: preg_replace(): Unknown modifier 'p' in your_file_name.php on line XXX

其背后的原因是该答案使用的模式为/<span[^>]+?[^>]+>|</span>/i,但是正则表达式将其理解为/<span[^>]+?[^>]+>|</s,因为在正则表达式/中,开始和结束是定界符,并且显示错误{{ 1}},因为p is unknown modifier在正则表达式中是s,因此它在p处停止并给出上述错误,要解决该问题,您必须使用single line modifier转义/,然后它才能工作也是

因此,您可以使用以下3种模式来删除\标签:

<span>