2010-09-09 113 views
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給我用逗號或東西分隔的每個字段上市,那將是再好不過了!)

回答

1

是的,因爲你使用的是preg功能,您可以使用negative look-behind assertion

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

(?<!\\\\)得到由PHP字符串處理爲可(?<!\\)這意味着測試該字符之前的空白是不是\

+0

神奇,雖然我需要它在分裂和沒有+。 (對未來的讀者!)我會在5分鐘內接受。 – 2010-09-09 16:59:30

1

這是一個非常容易出錯的方式來獲取文件信息。

爲此使用PHP函數stat

+0

和/或'opendir()'和['readdir()'](http://php.net/readdir)爲「目錄列表」 – gnarf 2010-09-09 16:57:19

+0

呃,這更糟糕,你認爲, m使用PHP中的SSH連接到服務器,運行ls然後在另一個PHP上解析結果服務器顯示用戶之前... – 2010-09-09 17:11:34