2010-09-09 83 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