2009-06-08 67 views
4

FTP LIST命令顯示當前工作目錄中所有文件和目錄的列表。問題是,根據服務器的不同,它會返回幾種不同的格式。有誰知道能夠解析最流行格式的.NET庫嗎?我很滿意「嘗試這個正則表達式,如果失敗了,請嘗試下一個正則表達式」的方法。解析來自FTP LIST命令的響應(語法變體)

回答

4

這是我在項目中使用的RegEx。似乎適用於基於Windows和Unix的FTP服務器。有人可能能夠清理它,但我通過在一個類上連接一堆屬性來構建它。所以對我來說這不是很殘酷。

^((?<DIR>([dD]{1}))|)(?<ATTRIBS>(.*))\s(?<SIZE>([0-9]{1,}))\s(?<DATE>((?<MONTHDAY>((?<MONTH>(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))\s(?<DAY>([0-9\s]{2}))))\s(\s(?<YEAR>([0-9]{4}))|(?<TIME>([0-9]{2}\:[0-9]{2})))))\s(?<NAME>([A-Za-z0-9\-\._\s]{1,}))$ 
8

下面是我一直使用的FileZilla中服務器的一個:

^(?<dir>[\-ld])(?<permission>([\-r][\-w][\-xs]){3})\s+(?<filecode>\d+)\s+(?<owner>\w+)\s+(?<group>\w+)\s+(?<size>\d+)\s+(?<timestamp>((?<month>\w{3})\s+(?<day>\d{2})\s+(?<hour>\d{1,2}):(?<minute>\d{2}))|((?<month>\w{3})\s+(?<day>\d{1,2})\s+(?<year>\d{4})))\s+(?<name>.+)$ 

http://chrishaas.wordpress.com/2009/06/10/regex-for-parsing-ftp-list-command/

+0

非常感謝! – 2009-06-25 18:54:35

+1

請注意,在我使用的服務器上,日期可以是1或2位數字,因此我必須將`(? \ d {2})`更改爲`(? \ d {1,2})` – 2011-02-01 12:47:13

1
^(?<dir>[\-ld])(?<permission>([\-r][\-w][\-xs]){3})\s+(?<filecode>\d+)\s+(?<owner>\w+)\s+(?<group>\w+)\s+(?<size>\d+)\s+(?<timestamp>((?<month>\w{3})\s+(?<day>\d{1,2})\s+(?<hour>\d{1,2}):(?<minute>\d{2}))|((?<month>\w{3})\s+(?<day>\d{1,2})\s+(?<year>\d{4})))\s+(?<name>.+)$ 

改變克里斯哈斯版本一小點點。已更改,以便日分組也可以由單個數字組成。 \ d {2} - > \ d {1,2}

感謝您使用原始版本。

0
^(?<dir>[\-ld])(?<permission>([\-r][\-w][\-xs]){3})\s+(?<filecode>\d+)\s+(?<owner>\S+)\s+(?<group>\S+)\s+(?<size>\d+)\s+(?<timestamp>((?<month>\w{3})\s+(?<day>\d{1,2})\s+(?<hour>\d{1,2}):(?<minute>\d{2}))|((?<month>\w{3})\s+(?<day>\d{1,2})\s+(?<year>\d{4})))\s+(?<name>.+)$ 

在我開的網站上,所有者以電子郵件地址格式顯示。我將所有者和組更改爲非空格字符而不是單詞字符。

這是擴展Yodiz的版本的克里斯哈斯的版本。非常感謝!