Разбор ответа от команды FTP LIST (варианты синтаксиса) - PullRequest
4 голосов
/ 08 июня 2009

Команда FTP LIST отображает список всех файлов и каталогов в текущем рабочем каталоге. Проблема в том, что он возвращает несколько разных форматов в зависимости от сервера. Кто-нибудь знает библиотеку .NET, которая может анализировать самые популярные форматы? Я согласен с подходом «попробуй это регулярное выражение, если не получится, попробуй следующее регулярное выражение».

Ответы [ 4 ]

8 голосов
/ 25 июня 2009

Вот тот, который я использовал для сервера 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/

4 голосов
/ 09 июня 2009

Вот 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,}))$
1 голос
/ 01 февраля 2010
^(?<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 голосов
/ 17 августа 2013
^(?<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 'Chris Haas'. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...