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

Reply via email to