php正则 但排除,php正则表达式用链接标记替换“某些单词”,但应在链接标记内排除“某些单词”...

这篇博客介绍了如何使用PHP的DOMDocument和DOMXPath来查找并替换HTML内容中的特定文本,同时避免替换已经存在于链接标签内的文本。通过遍历文本节点并检查其父节点是否为`a`标签,确保了对链接文本的保护。示例代码展示了从原始HTML字符串到处理后的HTML的转换过程。
摘要由CSDN通过智能技术生成

我有html内容存储在数据库表中.在那个html内容中我想用链接标签替换“SOME WORDS”.但如果“SOME WORDS”已经在链接标签中,我应该省略它们.

例如

内容

Lorem ipsum dolor SOME WORDS, consectetur adipiscing elit. SOME WORDS elementum pharetra velit at cursus. Quisque blandit, nibh at eleifend ullamcorper

输出应该是

Lorem ipsum dolor SOME WORDS, consectetur adipiscing elit. SOME WORDS elementum pharetra velit at cursus. Quisque blandit, nibh at eleifend ullamcorper

如您所见,它应该在替换时排除现有的链接文本.

非常感谢一些指导,以进入正确的轨道.

解决方法:

这是使用DOMDocument而不是正则表达式来解决它的方法:

$contents = <<

Lorem ipsum dolor SOME WORDS, consectetur adipiscing elit. SOME WORDS elementum pharetra velit at cursus. Quisque blandit, nibh at eleifend ullamcorper

EOS;

$doc = new DOMDocument;

libxml_use_internal_errors(true);

$doc->loadHTML($contents);

libxml_clear_errors();

$xp = new DOMXPath($doc);

// find all text nodes

foreach ($xp->query('//text()') as $node) {

// make sure it's not inside an anchor

if ($node->parentNode->nodeName !== 'a') {

$node->nodeValue = str_replace(

'SOME WORDS',

'SOME OTHER WORDS',

$node->nodeValue

);

}

}

// DOMDocument creates a full document and puts your fragment inside a body tag

// So we enumerate the children and save their HTML representation

$body = $doc->getElementsByTagName('body')->item(0);

foreach ($body->childNodes as $node) {

echo $doc->saveHTML($node);

}

标签:php,regex

来源: https://codeday.me/bug/20190520/1143886.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值