3

ls -lbの入力を解析し、各フィールドをPHPの配列に入れようとしています。

私の入力は次のようになります。

-rwx------  1 user.name users   546879 2008-09-05 09:23 Newspaper_Templates.pdf
-rwx------  1 user.name users   403968 2009-01-12 14:16 P2_05.ppt
-rwx------  1 user.name users   144896 2009-01-12 14:08 P2.5_Using_CRO.ppt
drwx------  8 user.name users     4096 2009-09-15 10:21 School\ 09-10
drwx------  2 user.name users     4096 2010-06-28 13:59 SMART\ Notebook
drwx------  2 user.name users     4096 2009-11-30 13:35 Templates

私は一度に各行を見て、。でエスケープされているものを除いて、複数のスペースを単一のスペースに置き換えようとしています。

各行は$filedataという変数に読み込まれ、次のように処理されます。

    $filedata = preg_replace("/\s+/", " ", $filedata);
    print_r (preg_split("/[\s]/", $filedata));

これはほとんど機能しますが、スペースがエスケープされている行の場合、明らかに機能しません。分割がスペースに対して機能するが、エスケープされたスペースに対しては機能しないように、これを変更するにはどうすればよいですか?

(あるいは、もっと良い方法はありますか?lsに、各フィールドをコンマなどで区切ってリストを表示してもらうことができれば、それはさらに良いでしょう!)

4

3 に答える 3

1

これは、ファイル情報を取得するための非常にエラーが発生しやすい方法です。

statこの目的にはPHP関数を使用してください。

于 2010-09-09T16:54:52.350 に答える
1

はい、preg関数を使用している場合は、ネガティブルックビハインドアサーションを使用できます。

$filedata = preg_replace("/(?<!\\\\)\s+/", " ", $filedata);
print_r(preg_split("/(?<!\\\\)\s/", $filedata));

(?<!\\\\)PHP文字列によって処理されます(?<!\\)。これは、空白の前の文字が\

于 2010-09-09T16:56:12.543 に答える
0

で試してみてください(?<!\\)\s+

于 2010-09-09T16:54:38.213 に答える