【发布时间】:2014-08-04 13:59:50
【问题描述】:
我已经尝试了几个版本,用于负前瞻或负后瞻,在 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);
和其他类似的版本
【问题讨论】:
-
也许可以试试这个:
<a href="(.*?)">[^(?:<img)]不幸的是,这只有在img标签紧跟在href标签之后才有效。你可以测试它here。虽然您可能应该测试您的实际文本 -
我不介意它是否仅适用于 href 之后的 img 标签。我使用了您的示例并对其进行了修改,以允许链接标记中的文本多于 href 属性。结果数组中的结果如下;它在第一个图像标记之前抓取链接,但结果中排除了以下正确链接。所以对我来说它没有用。
标签: php regex preg-match-all