这是我正在尝试做的事情:
我在我的一个应用程序中有什么FTP功能(这仅适用于我自己,而不是商业应用程序等),因为我不想为自己编写所有FTP请求/响应代码,我(作为一个懒惰的人,我在互联网上搜索FTP包装 我找到了this DLL。
这一切都非常棒,像魅力一样。除了一件事:当我在FTP服务器上请求特定文件的LastWriteTime时,DLL给了我奇怪的日期(即打印出虚构的日期)。我已经找到了问题。每当您向FTP服务器发送请求时,它都会发回一行响应,该响应具有非常特殊的格式。现在我能够收集到的,这种格式对于大多数服务器来说是不同的,我的包装器DLL带有6种预定义的响应格式,但是我的FTP服务器发回了第7个。这是对请求和REGEX格式的响应:
-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专业版请给我一个能解析上述FTP响应的ParsingFormat吗?
答案 0 :(得分:2)
第四种格式的手动检查和irb
检查都显示 匹配:
> re=/(?<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+\d+\s+\w+\s+\w+\s+(?<size>\d+)\s+(?<timestamp>\w+\s+\d+\s+\d{1,2}:\d{2})\s+(?<name>.+)/
> m=re.match("-rw-r--r-- 1 user user 594 Jun 11 03:44 random_log.file")
=> #<MatchData "-rw-r--r-- 1 user user 594 Jun 11 03:44 random_log.file" dir:"-" permission:"rw-r--r--" size:"594" timestamp:"Jun 11 03:44" name:"random_log.file">
> m['dir']
=> "-"
> m['permission']
=> "rw-r--r--"
> m['size']
=> "594"
> m['timestamp']
=> "Jun 11 03:44"
> m['name']
=> "random_log.file"
>
我认为一堆正则表达式很好。也许你需要到别处寻找问题。