3

これが私がやろうとしていることです:

私は自分のアプリの1つにFTP機能を含める必要があります(これは私自身のためであり、ビジネスアプリケーションなどではありません)。FTP要求/応答コードをすべて自分で書きたくなかったので、私は(怠惰です)男私は)FTPラッパーをインターネットで検索します。このDLL
を見つけました。

これはすべて非常に素晴らしく、魅力のように機能します。1つを除いて、FTPサーバー上の特定のファイルのLastWriteTimeを要求すると、DLLから奇妙な日付が表示されます(つまり、架空の日付が出力されます)。私は問題を見つけることができました。FTPサーバーにリクエストを送信するたびに、非常に特殊な形式の1行の応答が返されます。これで収集できたものです。この形式はほとんどのサーバーで異なります。ラッパー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を書いてください。

4

1 に答える 1

3

ハンドチェックとirb4番目のフォーマットのチェックの両方で、それ一致することが示されます。

> 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"
> 

正規表現の山は大丈夫だと思います。おそらく、他の場所で問題を探す必要があります。

于 2012-06-12T00:10:45.067 に答える