這裏就是我想要做的事:正則表達式:匹配,解析FTP響應請求
我什麼有一些FTP功能在我的應用程序之一(這只是我自己,不是一個企業應用或者這樣),因爲我不想爲自己編寫所有的FTP請求/響應代碼,所以我(作爲懶惰的人)在互聯網上搜索FTP包裝器。
我找到了this DLL。
這一切都非常棒,就像一個魅力。除了一件事情:當我在FTP服務器上請求特定文件的LastWriteTime時,該DLL給我奇怪的日期(即打印出虛構的日期)。我一直能夠找到問題。無論何時向FTP服務器發送請求,它都會發回一行響應,該響應具有非常特殊的格式。現在我已經能夠收集,這種格式對於大多數服務器是不同的,我的包裝DLL帶有6個預定義的響應格式,但是我的FTP服務器發回了第7個。下面是對請求的響應和正則表達式的格式:
-rw-r--r-- 1 user user 594 Jun 11 03:44 random_log.file
這裏是我的正則表達式解析格式:
"(?<dir>[\-d])(?<permission>([\-r][\-w][\-xs]){3})\s+\d+\s+\w+\s+\w+\s+(?<size>\d+)\s+(?<timestamp>\w+\s+\d+\s+\d{4})\s+(?<name>.+)", _
"(?<dir>[\-d])(?<permission>([\-r][\-w][\-xs]){3})\s+\d+\s+\d+\s+(?<size>\d+)\s+(?<timestamp>\w+\s+\d+\s+\d{4})\s+(?<name>.+)", _
"(?<dir>[\-d])(?<permission>([\-r][\-w][\-xs]){3})\s+\d+\s+\d+\s+(?<size>\d+)\s+(?<timestamp>\w+\s+\d+\s+\d{1,2}:\d{2})\s+(?<name>.+)", _
"(?<dir>[\-d])(?<permission>([\-r][\-w][\-xs]){3})\s+\d+\s+\w+\s+\w+\s+(?<size>\d+)\s+(?<timestamp>\w+\s+\d+\s+\d{1,2}:\d{2})\s+(?<name>.+)", _
"(?<dir>[\-d])(?<permission>([\-r][\-w][\-xs]){3})(\s+)(?<size>(\d+))(\s+)(?<ctbit>(\w+\s\w+))(\s+)(?<size2>(\d+))\s+(?<timestamp>\w+\s+\d+\s+\d{2}:\d{2})\s+(?<name>.+)", _
"(?<timestamp>\d{2}\-\d{2}\-\d{2}\s+\d{2}:\d{2}[Aa|Pp][mM])\s+(?<dir>\<\w+\>){0,1}(?<size>\d+){0,1}\s+(?<name>.+)"
這些非似乎能夠正確地解析日期時間,因爲我不知道如何做到這一點,可以REGEX pro請給我寫一個能解析上面的FTP響應的ParsingFormat?
該請求是製表符分隔的嗎?這似乎很奇怪,你使用正則表達式來做到這一點,至少沒有先在選項卡或其他東西上分割。請求格式非常普遍;用普通的舊字符串函數可能會做很多繁重的工作。 –
@Justin好的,問題在於:你看到服務器返回的日期? Jun 11 03:44,當我解析迴應後: _fileDateTime = Date.Parse(m.Groups(「timestamp」)。Value)這個混亂,爲什麼?因爲Date.Parse()不能解析這種日期格式,似乎奇怪的是,FTP不返回年,但無論如何 – Qqbt
@Justin自定義日期格式化程序應該在這一點上做的伎倆 – Qqbt