我已经尝试了几个版本,负面的前瞻或负面的外观,在SO和整个网络上找到,但我无法让它工作。
我想从大量文本中提取html链接,除非它们以图像为基础。 例子:
<a href="somelink">sometext</a> <-- match and grab somelink
<a href="anotherlink"><img src="someimage"></a> <-- ignore link
我试过
preg_match_all('/<a href="(.*?).*?>.*?<\/a>^((?!<img).)*/', $string), $matches);
preg_match_all('/<a href="(.*?).*?>.*?<\/a>(?<!img )/', $string, $matches);
和其他类似版本
答案 0 :(得分:0)
我们不要使用正则表达式。解析HTML,获取所有锚标记并检查它们是否包含<img>
元素。
<?php
$html = '<a href="somelink">sometext</a><a href="anotherlink"><img src="someimage"></a>';
$doc = new DOMDocument();
$doc->loadHTML($html);
$anchors = $doc->getElementsByTagName('a');
foreach ($anchors as $a) {
if ($a->getElementsByTagName('img')->length === 0)
echo $doc->saveHTML($a);
}
是的,它更长,但它也是一个更具可读性和相当自我记录的地狱。
输出:
<a href="somelink">sometext</a>