2014-01-21 64 views
0

我試圖在圖像擴展之前查找數字(jpg | jpeg | png | bmp | gif | tif)。 但我想排除它們,如果有NUMBERSxNUMBERS模式。 我的表達是:(?!\ DX \ d)。Negative lookbehind Regex in Numbers?

[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

TRY: aoi32x453.jpg ser32xa453.jpeg 爲/ as673.jpg x673.png YGT/x673.bmp x673.gif

我需要排除m在我的表達式之前包含'\ dx \ d'的atches。

我需要一個匹配: sax73.jpg

但我不希望那些 'NUMBERSxNUMBERS': 35x35.jpg

  • ☻的Javascript中的Greasemonkey爲Firefox每晚
  • ☻ser32xa453 < < <這個 'XA' 是包括,但不包括ser32x453
+0

在該環境中您使用這個(語言,編輯工具)?在不同的正則表達式實現中,對lookbehind有不同級別的支持。 – Bergi

+0

在你的例子中,排除'x'並不是一個真正的問題。最大的問題是要知道從哪裏開始尋找x。爲此,您必須使用規則來解析整個文件名。 – sln

+1

這是'ser32xa453.jpeg'是一個錯字,還是應該匹配? – sln

回答

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) 
+0

匹配35x7'3.jpg' – sln

+0

@sln哎呀,你是對的。看到我更新的答案。 –

+0

我知道你打算用x來拋出\ d。 – sln

0

如果您使用的語言沒有lookbehind特性(如Javascript),或者因爲您需要可變長度lookbehind(只支持.net語言AFAIK並且在Java中有一些限制),您可以使用捕獲組:

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

你只需要提取第一個捕獲組

0

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