我有一个这样的字符串,但每种情况下链接的数量可能不同:
<a>link 1</a> >> <a>link 2</a> >> <a>link 3</a> >> <a>link 4</a>
我想删除该字符串中的最后一个链接,然后像这样转换:
<a>link 1</a> >> <a>link 2</a> >> <a>link 3</a> >> link 4
有一个简单的功能吗?我知道我可以使用preg_match,preg_match_all,explode等几个函数...使用这些函数,删除第一个链接标记很容易,但删除最后一个标签有点令人困惑。
感谢您的帮助。
答案 0 :(得分:3)
使用DOM解析器,例如DOMDocument。
$html = '<p>
<a>link 1</a> >> <a>link 2</a> >> <a>link 3</a> >> <a>link 4</a>
</p>';
$dom = new DOMDocument;
$dom->loadHTML($html);
$a = $dom->getElementsByTagName('a');
$lastA = $a->item($a->length - 1);
$dom->getElementsByTagName('p')->item(0)->appendChild($dom->createTextNode($lastA->nodeValue));
$lastA->parentNode->removeChild($lastA);
$newHtml = '';
foreach ($dom->getElementsByTagName('body')->item(0)->childNodes as $node) {
$newHtml .= $dom->saveHTML($node);
}
echo $newHtml;
此代码输出......
<p>
<a>link 1</a> >> <a>link 2</a> >> <a>link 3</a> >>
link 4</p>
当然,您不应该在HTML中使用>
(它应该编码为>
)。但如果必须,请在最终的HTML上使用html_entity_decode()
。
答案 1 :(得分:1)
至于regexp ......
$str = '<p>
<a>link 1</a> >> <a>link 2</a> >> <a>link 3</a> >> <a>link 4</a>
</p>';
echo preg_replace('#^(.*)<a[^>]*?>(.*?)</a>(.*?)#im', '$1$2$3', $str);