另一个带有正则表达式问题的HTML
我正试图从<a>
标签中删除所有内容,但href。
我放在一起的以下正则表达式就是这样,直到它找到一个不匹配的标签(没有href引用的标签)
然后它一直在寻找直到下一个href,然后完全接受它。
检查: http://regex101.com/r/zO0cX3
正如您在此处所看到的,<a id="5quot;>test</a>
被删除,即使它不应该被删除。
输出应该只是<a href="blabla">blabla</a>
,所以删除在href之后变为href之前的任何内容,但仍然在<a>
标记本身之间。如果没有href,正则表达式应该忽略它并保留它。
这可能是一个简单的解决方案,但即使我尝试也无法想出它。即使没有href,有没有办法“查看”结尾>
?
答案 0 :(得分:0)
HTML不是常规语言,无法通过正则表达式正确解析。请改用DOM解析器,这样即使将来标记的格式发生变化,您的代码仍然有效。这是使用PHP DOMDocument
类:
$dom = new DOMDocument;
$errorState = libxml_use_internal_errors(TRUE); // don't display errors
$dom->loadHTML(htmlspecialchars_decode($html));
foreach ($dom->getElementsByTagName('a') as $node) {
foreach ($node->attributes as $attr) {
if ($attr->name !== 'href') {
$node->removeAttribute($attr->name);
}
}
}
libxml_use_internal_errors($errorState); // reset the state
echo $dom->saveXML();