in reply to Regex and PID issue
... I am always missing the last digit of the process id ...
qr|$owner\s+(\d*)\w+...|
qr|$owner\s+(\w+)\w+...|
If your $line is like the examples given by hippo and stevieb, the \w+ immediately following the capturing (\d*) (or following the (\w+) in your Method 2) requires that the captured decimal sequence give back one digit in order to achieve an overall match. (Remember that \w includes the \d character class.)
The regex engine always does whatever is necessary to achieve an overall match.c:\@Work\Perl\monks>perl -wMstrict -le "my $line = 'ubuntu 9377 0.0 0.1 23668 1600 pts/2 S+ 18:23 + 0:00 top'; my $owner = 'ubuntu'; ;; $line =~ m{ $owner \s+ (\d*) (\w+) }xms; print qq{captured: (\\d*) ($1) (\\w+) ($2)}; " captured: (\d*) (937) (\w+) (7)
Update: Oops... Didn't carefully read stevieb's post above, wherein all this is explained — and a bit better!
Give a man a fish: <%-{-{-{-<
|
|---|