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