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

我有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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值