$re = '/(?<type>.{1})(?<user_access>.{3})(?<group_access>.{3})(?<other_access>.{3}) +(?<oder>[0-9]*) +(?<owner>[a-z]*) +(?<group>[a-z]*) +(?<size>\d*) +(?<month>[a-z]{3}) +(?<day>\d{1,2}) +(?<year>\d{0,4})(?<time>(?<hour>\d{2}):(?<minute>\d{2}))? +(?<filename>(?<basename>.+)\.(?<extension>.*)|(?<no_extension_filename>.*))/mi';
$str = 'total 80
drwxr-xr-x 2 root root 4096 Sep 23 15:20 bin
drwxr-xr-x 3 root root 4096 Sep 3 18:41 boot
drwxr-xr-x 3 root root 4096 Aug 19 20:48 build
drwxr-xr-x 14 root root 3900 Sep 23 15:20 dev
drwxr-xr-x 98 root root 4096 Sep 23 15:20 etc
drwxr-xr-x 4 root root 4096 Oct 6 2014 home
drwxr-xr-x 21 root root 4096 Aug 21 19:49 lib
drwxr-xr-x 2 root root 4096 Jul 8 13:21 lib64
drwx------ 2 root root 16384 Aug 26 2014 lost+found
drwxr-xr-x 2 root root 4096 Aug 26 2014 media
drwxr-xr-x 2 root root 4096 Apr 10 2014 mnt
drwxr-xr-x 2 root root 4096 Aug 26 2014 opt
dr-xr-xr-x 133 root root 0 Sep 23 15:20 proc
drwx------ 4 root root 4096 Sep 23 15:27 root
drwxr-xr-x 22 root root 760 Sep 23 17:40 run
drwxr-xr-x 2 root root 12288 Sep 23 15:20 sbin
drwxr-xr-x 2 root root 4096 Aug 26 2014 srv
dr-xr-xr-x 13 root root 0 Sep 23 15:20 sys
drwxrwxrwt 2 root root 4096 Sep 23 17:40 tmp
drwxr-xr-x 10 root root 4096 Aug 26 2014 usr
drwxr-xr-x 14 root root 4096 Aug 21 19:52 var
';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php