我在PHP中有一个HTML字符串。它可能有几个这样的锚标签
.....<p><span>qwerty</span></p>...qwerty....<a href="www.xyz.com">xyz</a>qwerty...<a href="www.xyz.com"><p><span>xyz</span></p></a>qwerty.....
<a>
标记可能包含其他几个HTML标记,例如<p>,<span> <br>
等。
我想要一个正则表达式删除<a>
标记内的所有内容,包括<a>
标记,即删除所有锚标记以及锚标记内的所有数据
输出应为:<p><span>qwerty</span></p>....qwerty....qwerty....qwerty....
请注意,最终输出中没有xyz。
由于
P / s:String可能包含未嵌入Anchor标记的其他HTML标记。我想保留它们。让我们说字符串可能包含p,span,div,strong等标签。只应删除标签。我需要正则表达式。
答案 0 :(得分:2)
您不需要任何正则表达式,只需使用strip_tags
function从输入中删除HTML标记:
$s = '.....qwerty....<a href="www.xyz.com">xyz</a>qwerty...<a href="www.xyz.com"><p><span>xyz</span></p></a>qwerty.....';
echo strip_tags($s);
//=> .....qwerty....xyzqwerty...xyzqwerty.....
基于已修改的问题:您可以将某些代码列入白名单以允许其输入:
$s = '.....<p><span>qwerty</span></p>...qwerty....<a href="www.xyz.com">xyz</a>qwerty...<a href="www.xyz.com"><p><span>xyz</span></p></a>qwerty.....';
echo strip_tags($s, '<p><span>');
//=> .....<p><span>qwerty</span></p>...qwerty....xyzqwerty...<p><span>xyz</span></p>qwerty.....
使用正则表达式进行HTML解析的所有陷阱都可以与OP一起使用:
echo preg_replace('~<a [^>]*>.*?</a>~', '', $s);
//=> .....<p><span>qwerty</span></p>...qwerty....qwerty...qwerty.....
答案 1 :(得分:0)
您可以使用DOMDocument
而不是正则表达式来实现所需的结果
function removeanchors( $strhtml ){
$dom=new DOMDocument;
$dom->loadHTML( $strhtml );
$col=$dom->getElementsByTagName('a');
/* need to work backwards through collection of nodes! */
for ( $i = $col->length; --$i >= 0; ) {
$a = $col->item( $i );
$a->parentNode->removeChild( $a );
}
return $dom->saveHTML();
}
$strhtml='.....qwerty....<a href="www.xyz.com">xyz</a>qwerty...<a href="www.xyz.com"><p><span>xyz</span></p></a>qwerty.....womble<a href="www.xyz.com"><p><span>xyz</span></p></a> ..... badger <a href="www.xyz.com"><p><span>xyz</span></p></a>';
echo removeanchors( $strhtml );