Not shorter, but maybe more readable :-)
This is a regex I have to match "ls -la" output on
Unix/Linux/Cygwin systems for directories, files,
and symlinks.
/^
([-dl]\S{9}) # perms
(\+)?\s+ # access control list present
(\d+)\s+ # number of links
(\S+)\s+ # owner
(\S+)\s+ # group
(\d+)\s+ # size
([A-Z][a-z][a-z]\s+\d\d?\s+(?:\d\d:\d\d|\d{4,}))\s # mtime
(.*?) # name
(?:\s+->\s(.*))? # symlink target
$/x;
--
Mike Arms
-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED]
Sent: Friday, October 01, 2004 2:12 PM
To: [EMAIL PROTECTED]
Subject: A shorter regexp?
Hi, all.
Sorry to've ignited such a firestorm with my questions regarding stat() vs
ls for file dating... ;-)) I hope this question will be less provocative.
At one point in my script, I still use ls to get a line of data for files,
what I'm trying for is a regexp that'll pull the filename out--including
soft links. What I have right now--while it works--is rather, um, long:
$line =~
/^[-l][-rswx]{9}\s+\d+\s+\w+\s+\w+\s+\d+\s+\w+\s+\d+\s+(?:\d{4}|\d\d:\d\d)\s
+(.*)$/;
I had a shorter regexp, actually *much* shorter:
$line =~ /^.+(?:\d{4}|\d\d:\d\d)\s+(.*)$/;
but it ran into a problem with the following file line:
lrwxrwxrwx ... Sep 10 15:15 1614 -> /opt/K/SCO/...1614
It tripped on the 1614 and returned only "-> /opt/K/SCO/...1614" as the
filename. Anyone have any suggestions for shortening that monster regexp
listed above?
Thanks!
Deane
_______________________________________________
ActivePerl mailing list
[EMAIL PROTECTED]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs