正则表达式:匹配除以控制组结尾的字符串外的所有内容

时间:2019-03-27 15:06:41

标签: regex

我正在抓取某些网站,但我想放弃基于正则表达式对常见img文件的调用。 regex函数应为

匹配除以.jpg,.png,.gif结尾的URL(字符串)以外的所有内容

示例:

  • www.example.com/test.jpg
  • www.example.com/test2.png

我尝试这样做

.*(?:(?!\.(jpg|png|gif)))$

但没有成功

1 个答案:

答案 0 :(得分:0)

您要构建的正确的负面展望是这样

(?!.*\.(?:jpg|png|gif)$)

如果字符串以jpgpnggif结尾,并且您需要用来拒绝字符串的整体正则表达式是这样,那么它将拒绝该字符串,

^(?!.*\.(?:jpg|png|gif)$).+$

Demo

另外,您的正则表达式.*(?:(?!\.(jpg|png|gif)))$的问题在于,.*已经贪婪地消耗了所有内容,而前面没有字符,因此您的否定前瞻将始终满足,因为不会在其后留下的任何字符,如果它们的基本面为负数,则可以拒绝您的字符串。因此,您需要将.*移至否定的外观中,以检查在.jpg.png.gif

之前是否允许零个或多个其他字符。