数字中的负面看起来正则表达式?

时间:2014-01-21 19:56:54

标签: regex lookbehind

我试图在图片扩展之前找到数字(jpg | jpeg | png | bmp | gif | tif)。 但是如果有一个NUMBERSxNUMBERS模式,我想排除它们。 我的表达是:

(?!\ DX \ d)

[0-9] {1,}。(JPG | JPEG | PNG | BMP | GIF | TIF)

●文本位于以下长链接中: http://www.google.com/imgres?newwindow=1&safe=off&sa=X&hl=es&rls=%7Bmoz%3AdistributionID%7D%3A%7Bmoz%3Alocale%7D%3A%7Bmoz%3Aofficial%7D&tbs=imgo%3A1&tbm=isch&tbnid=Sl6oOM1zv4WRkM%3A&imgrefurl=http%3A%2F%2Fes.gdefon.com%2Fdownload%2FMostrar-Pato-Duffy_El-show-del-Pato%2F30329%2F1280x1024&docid=JNlhLyS8MUlRAM&imgurl=http%3A%2F%2Fst.gdefon.com%2Fwallpapers_original%2Fwallpapers%2F30329_shou-daffi-daka_or_the-daffy-duck-show_1280x1024.jpg

尝试这些: aoi32x453.jpg ser32xa453.jpeg 如/ as673.jpg x673.png YGT / x673.bmp x673.gif

我需要在表达式之前排除包含'\ dx \ d'的匹配项。

我需要成为一名比赛: sax73.jpg

但我不希望那些拥有'NUMBERSxNUMBERS'的人: 35x35.jpg

  • GreGreasemonkey中的Javascript for Firefox Nightly
  • ☻ser32xa453<<<这个'xa'包括但不包括ser32x453

3 个答案:

答案 0 :(得分:1)

(?!...)是负面的 - 提前。后视是(?<!...)。此外,(?<!x.*)会拒绝任何字符串,如果x出现在模式之前的字符串中的任何位置。如果您想确保x没有出现在号码前面,请使用(?<!x)

但是,这只会匹配x后未出现的第一个数字字符。例如在"35x73.jpg"中,它只会匹配3.jpg。一个简单的解决方案是通过使用像(?<![x0-9])这样的后视来确保前一个字符也不是数字。

还有一些注意事项:{1,}可以简化为+[0-9]可以简化为\d(尽管根据您的环境,\d }可以匹配其他数字系统中的数字,例如Eastern Arabic numerals):

(?<![x\d])\d+\.(jpg|jpeg|png|bmp|gif|tif)

答案 1 :(得分:0)

如果您使用的语言没有lookbehind功能(如Javascript),或者因为您需要一个可变长度的lookbehind(仅支持.net语言AFAIK并且在Java中有一些限制),您可以使用捕获组:

(?:^|\s)[^x\s]*?([0-9]+\.(?:jpg|jpeg|png|bmp|gif|tif))(?:\s|$)

您只需要提取第一个捕获组

答案 2 :(得分:0)

(?<=\s)[^x]*?[0-9]+\.(jpg|jpeg|png|bmp|gif|tif)(?=\s)