(.*?) will match 0 or more anything characters, and as few of them as possible. In other words, 0 characters. My approach to this problem would be to not worry so much about the spaces, but concentrate on the fact that "Last" and "Never" are possible delimiters to use. For example:
while (my $line=<>) { $line =~ /(\S+)\s+(.+?)\s*((?:Last|Never).+)/; print "$1::$2::$3\n"; }
With your input, this produces:
flexlm::FlexLM license manag::Never logged in m12345::Shmoe,Ronald K.::Last login Thu May 1 14:11:54 2003 (160 days + ago) m54321::O'Schmoe,Karen D.::Last login Sun Sep 29 15:39:43 2002 (374 da +ys ago m54321::O'Schmoe,Karen D.::Last login Sun Sep 29 15:39:43 2002 (374 da +ys ago mresw3::Joe-Schmoe,Mira::Never logged in mdsjlk::Schmoe, Robert L.::Last login Thu Sep 12 15:41:11 2002 (391 da +ys ago) oracle::OraSchmoe Oracle user::Never logged in sshd::OpenSchmoe Privilege Se::Never logged in web::suitespot,httpd serv::Never logged in
..which appears to be split out the way you want.
In reply to Re: more than one whitespace char as word anchor
by delirium
in thread more than one whitespace char as word anchor
by blink
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |