获取 URL 并忽略其他

Get URLs and ignore others

我正在尝试获取除包含 "get/index.php" 和 "PICSNUM"

之外的所有 href 网址
<a href="/video5505298733/travel_and_tourism_recovery_coronavirus." title="The places and companies missing tourist dollars most.">The places and companies missing tourist dollars most.</a></p><p class="info"><span class="bg"><span class="duration">10 min</span><a href="/get/index.php?id=qafMsaaScGLPuKqGuanBpZjHtGHKppeHpJu5r6G9raaHoqa3tJS-ope5tJK6s5TLqp8"><span class="name">CORONAVIRUS</span></a><span><span class="bolder"> - </span> 1.7k <span class="bolder">Views</span></span><span class="text-disabled"><span class="bolder"> - </span> 2 days ago</span><span class="bolder"> - </span></span></p></div></div>               <div class="thumb-lock "><div class="thumb-big"><div class="thumb"><a href="/midia54891337/PICSNUM/russia_fire_coronavirus_patients_intl"><img src="lightbox.gif" data-src="https://cdn-pic.cnews-cdn.com/videos/thumbs169/22/d3/a2/22d3a23423dfda7f5/22d3a2dfbb9fdfgd43f5.PICNUM.jpg"  /></a>

我查看了这个主题以及负面前瞻的工作原理,但我认为我不明白它是如何工作的 Regex to include one thing but exclude another

我试过了,但没用

(?<=href=")^(?!\/(get|PICSNUM))[a-z0-9-_\/.]+

https://regex101.com/r/bG8Rq4/2

我改变了结果更好,但仍然有一部分包含 PICSNUM 的 url 仍在返回

(?<=href=")(?!\/(get|PICSNUM))[a-z0-9-_\/.]+

https://regex101.com/r/12HHHt/1

/video5505298733/travel_and_tourism_recovery_coronavirus.
/midia54891337/

我哪里错了? 正则表达式让我有点困惑

您可以使用 dom 解析器来获取 href 的值。如果您找到了这些值,则可以使用否定前瞻来断言字符串不以 /get 开头或不包含 /PICSNUM

该模式还不起作用的原因是因为 /PICSNUM 没有在第一次回顾之后直接跟进。

^(?!(?:/get|\S*/PICSNUM))\S+

Regex demo | Php demo wit DOMDocument

您可以在现有模式中使用交替,但效率不高。

相反,您可以使用捕获组:

href="(?!(?:/get/index\.php|\S*/PICSNUM/))([a-z0-9-_/.]+)

Regex demo