2012-09-21 26 views
2

我使用的是具有一些FTP功能的第三方ETL工具,但它們很少(它被稱爲Pentaho)。複雜的正則表達式 - 查找列表中的最近日期

我需要做的就是從ftp站點下載最新的zip文件。該網站的內容顯示如下:

... 
File:tfo.supplement.20120901.done 9/1/2012 3:48:00 AM 
File:tfo.supplement.20120901.zip 421144 KB 9/1/2012 3:48:00 AM 
File:tfo.supplement.20120904.done 9/4/2012 3:57:00 AM 
File:tfo.supplement.20120904.zip 421794 KB 9/4/2012 3:57:00 AM 
File:tfo.supplement.20120905.done 9/5/2012 3:28:00 AM 
File:tfo.supplement.20120905.zip 421875 KB 9/5/2012 3:28:00 AM 

因此,在這種情況下,我想tfo.supplement.20120905.zip文件。

第三方工具只提供了一個獲取文件選項,它帶有一個文件夾和一個正則表達式。它將抓取與正則表達式匹配的目標FTP站點文件夾中的所有文件。

有人告訴我,有可能創建一個正則表達式,它將比較不同的匹配選項並輸出最大值。例如。以.zip結尾的所有tfo.supplement。*文件並將中間的日期視爲一個整數,然後選取具有最大整數的文件。

我不知道正則表達式可以支持這種功能。有人可以幫助我建立一個表達式,我可以在這個用例中使用嗎?

+0

也許我對正則表達式不夠了解,但我認爲排序和類似的功能是正則表達式通常要做的之外的功能。 – John

+0

@John我也這麼認爲,但很明顯,Perl正則表達式引擎可以在c中接受一個表達式並做功。我很難找到這樣的例子:/ –

回答

3

你在找這樣的嗎? >>

s/\s(\d+)\/(\d+)\/(\d{4})\s/{$d = 10000*$3+100*$1+$2 if $d < 10000*$3+100*$1+$2}/eg; 

測試此代碼here

+0

看起來不錯,謝謝測試人員。你能解釋一下嗎?我對Perl或正則表達式並不擅長。 –

+0

@ w00te - 請參閱http://ideone.com/OmtOg代碼與評論 –

+0

謝謝:)出於好奇,你怎麼能修改它,以便它匹配左側文件名中的yyyymmdd?我擔心有人上傳文件的舊日期,但上傳日期會更新。再次感謝:) –