php - 如何使用 php 查找并删除字符串中的最后一个链接标签?

标签 php html regex

我有一个像这样的字符串,但每种情况下的链接数量可能不同:

<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 等...使用这些函数,删除第一个链接标签非常容易,尽管删除最后一个链接标签有点​​令人困惑。

感谢您的帮助。

最佳答案

使用 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;

CodePad .

此代码输出...

<p> 
<a>link 1</a> &gt;&gt; <a>link 2</a> &gt;&gt; <a>link 3</a> &gt;&gt;     
link 4</p>

当然,您不应该在 HTML 中直接使用 >(它应该编码为 >)。但如果必须,请在最终 HTML 上使用 html_entity_decode()

CodePad .

关于php - 如何使用 php 查找并删除字符串中的最后一个链接标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9027182/

相关文章:

php - Native-session 针对代码点火器 2.1.4 进行了修改...这有意义吗?

regex - 如何在正则表达式中添加用户定义的字符串

JavaScript/jQuery VIN 验证器

javascript - 正数正则表达式 + 大于零的小数 (0.1)

javascript - 如何将媒体查询与 javascript 结合起来?

html - 如何在mvc中内联列表

javascript - 从下拉列表中选择数据时从 MYSQL 数据库设置输入字段值属性

php - 如何在 zend 中清理/释放数据库查询内存?

php - 在 MySQL 语句中动态使用 PHP 变量

javascript - appendChild 未正确设置parentElement