Команда FTP LIST отображает список всех файлов и каталогов в текущем рабочем каталоге. Проблема в том, что он возвращает несколько разных форматов в зависимости от сервера. Кто-нибудь знает библиотеку .NET, способную анализировать самые популярные форматы? Я согласен с подходом «попробуйте это регулярное выражение, если оно не работает, попробуйте следующее регулярное выражение».
Разобрать ответ от команды FTP LIST (варианты синтаксиса)
Ответы (4)
Вот тот, который я использовал для сервера 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/
(?<day>\d{2}) на (?<day>\d{1,2}).
- person Scott Whitlock; 01.02.2011
Вот RegEx, который я использовал в проекте. Кажется, работает как для Windows, так и для FTP-серверов на базе Unix. Кто-то может его почистить, но я создаю его, объединяя кучу свойств в классе. Так что это не так жестоко поддерживать для меня.
^((?<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,}))$
^(?<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}
Спасибо за оригинальную версию.
^(?<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>.+)$
На сайте, на котором я нахожусь, владелец отображается в формате адреса электронной почты. Я изменил владельца и группу, чтобы они были символами без пробелов, а не символами слова.
Это расширение версии Йодиза версии Криса Хааса. Большое спасибо!