提问人:Epiphanisation 提问时间:1/29/2011 最后编辑:hakreEpiphanisation 更新时间:12/25/2012 访问量:86
如何设置否定的 reg 表达式匹配以提取所有其他链接
how do i set up a negative reg expression match to pull out all the other links
问:
嗨,我有以下html,并想拉出所有其他链接,这些链接不是所有要匹配的URL都是不同的,所有不匹配的URL都是相同的,因此我正在考虑否定匹配的思路,即匹配所有不匹配的http://dont-match.co.uk
http://dont-match.co.uk
<a href="http://match-this-url.com/">link text</a> some
text <a href="http://match-this-diff-url.com/">link text</a> more
text <a href="http://dont-match.co.uk/">link text</a>
text <a href="http://match-this-different-url.com/">link text</a>
text <a href="http://dont-match.co.uk/">link text</a>
这是我到目前为止所拥有的:
/(<a href="http:\/\/[dont-match.co.uk]\/[^\"]*">([\d\D]*?)<\/a>)/
答:
4赞
netcoder
1/29/2011
#1
使用否定的展望:(?!expression not to match)
preg_match_all('/(<a href="http:\/\/(?!dont-match\.co\.uk).*?\/[^"]*">(.*?)<\/a>)/', $str, $matches);
评论
0赞
Alan Moore
1/29/2011
仅供参考,您可以使用其他字符作为正则表达式分隔符。例如,同样有效,现在您不必转义正则表达式中的斜杠。/
'~(<a href="http://(?!dont-match\.co\.uk).*?/[^"]*">(.*?)</a>)~'
0赞
hakre
12/25/2012
看起来这个答案是错误的。请参阅 OP 的后续(重复)问题:我如何停止此注册表达式匹配所有这些(不是说这是微不足道的,您可能会发现这个答案很有用:stackoverflow.com/a/13994665/367456)
0赞
hakre
12/25/2012
@netcoder,您是否看到为什么 OP 打开了第二个看起来像重复的问题,后来声称您在这里的正则表达式不起作用?并不是说它在这里的上下文中不起作用,我只是想知道重复问题的巧合。
0赞
netcoder
12/25/2012
@hakre:另一个 Q 在标签上包含一个属性,它不是此正则表达式的一部分。(你知道当我们重复使用DOM时,这就是它;-)rel
<a>
0赞
hakre
12/25/2012
哦,是的,甚至得到了回答。对我来说为时已晚。感谢您的反馈,很抱歉打扰您。
上一个:仅使用正则表达式拉出一个链接
评论