我需要一个删除span标签的正则表达式,例如,如果我们有:
<span class="something"><strong>Hello</strong></span>
输出应为:
<strong>Hello</strong>
答案 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>