2015-09-09 70 views
1

我正在檢索文件列表,但解析器正在打破其中一個文件。所以我打算在對其進行修改:是否有正則表達式來解析FTP目錄列表中的值?

正則表達式:

/ +/g 

這裏是一個上市了有麻煩:

drw-rw---- 2 joeUser dhapache  7 May 18 2011 Hello World.html 

是否有一個正則表達式的人用它來解析文件列表?此外,有確定的假設,任何之後的第9位是文件名(其中要拆分的空格字符?

回答

0

如果是我,我會確保你的回報數據進行格式化,以填補在給定數量每個字段中的字符,填充其中具有空間需要然後我的正則表達式將是這樣的:

^(.*{12})(.*{3})(.*{20})(.*{20})(.*{3})(.*{12})(.*{30}) 

其中:

\1 = permissions 
[...] 
\6 = date 
\7 = filename 

一旦你對每場比賽/組的值,修剪產生的數據。

有意義嗎?

+0

不幸的是,我沒有什麼服務器返回的控制。它適用於大型應用程序中的小型集成FTP模塊,用戶可以使用自己的服務器。 –

+1

換句話說,檢查返回數據是否被格式化爲用空格填充值,以便重要數據位於每行相同的字符數:) – CLaFarge

1

如果可能的話,使用具有像一個固定的格式MLSD FTP命令:

type=file;modify=20150803062903;size=1410887680; filename.avi 

RFC 3659

回退到LIST命令只能作爲最後的手段對不支持它(如IIS)服務器。

如果您需要的文件名而已,使用NLIST命令。所有的服務器都支持它,它只產生文件名,所以不需要解析。


有對LIST命令中沒有定義的格式。所以假設任何事情都是不安全的。

特別的IIS使用了完全不同的格式:

02-11-15 03:05PM   1410887680 movie.avi 

即使使用一個類Unix服務器的格式,該格式將與文件的年齡差異。如果該文件是夠新,它的時間格式如:

-rw-r--r-- 1 ftp ftp    11 Sep 09 16:00 new_file.txt 

這也是很常見的爲用戶和組列糅合在一起,如果用戶名是太長。