我已经尝试了几个版本,用于负向前视或负向后视,在这里和整个网络上都可以找到,但我就是不能让它工作。
我希望从大量的文本中提取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);和其他类似版本
发布于 2014-08-04 22:25:08
我们不要使用正则表达式来解决这个问题。解析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>https://stackoverflow.com/questions/25120484
复制相似问题