首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式否定,与字符串的一部分负匹配

问正则表达式否定,与字符串的一部分负匹配
EN

Stack Overflow用户
提问于 2014-08-04 21:59:50
回答 1查看 69关注 0票数 0

我已经尝试了几个版本,用于负向前视或负向后视,在这里和整个网络上都可以找到,但我就是不能让它工作。

我希望从大量的文本中提取html链接,除非它们是以图像为锚点的。示例:

代码语言:javascript
复制
<a href="somelink">sometext</a>  <-- match and grab somelink
<a href="anotherlink"><img src="someimage"></a>  <-- ignore link

我试过了

代码语言:javascript
复制
preg_match_all('/<a href="(.*?).*?>.*?<\/a>^((?!<img).)*/', $string), $matches);
preg_match_all('/<a href="(.*?).*?>.*?<\/a>(?<!img )/', $string, $matches);

和其他类似版本

EN

回答 1

Stack Overflow用户

发布于 2014-08-04 22:25:08

我们不要使用正则表达式来解决这个问题。解析HTML,获取所有锚标签,并检查它们是否包含<img>元素。

代码语言:javascript
复制
<?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);
}

是的,它更长,但它也是一个地狱,更具可读性和更好的自我文档化。

输出:

代码语言:javascript
复制
<a href="somelink">sometext</a>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25120484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档