in reply to Backtracking for substitutions
I didn't use \w because that goes for alphanumerics. I matched the whole login name with the character class [a-z]+, with one whitespace character before and after it. I didn't need to match the rest of the string, because that particular combination only occurs once in your dataset.#!/usr/bin/perl -w use strict; my @lines = ( 'Bob Smith bsmith 00001234567 01/01/1986 00:00:00', 'Mary Ann Doe mdoe 00001234568 01/01/1986 00:00:00 00001234563 01/ +01/1986 00:00:00', 'Gilligan Q Smith gsmith 00001234569 01/01/1986 00:00:00'); foreach my $line (@lines) { $line =~ s/(\s[a-z]+\s0{4})/,$1/g; print "New line:\n'$line'\n"; }
If I were doing this on my own, I might look into split. I like split.
Split on the token (you know it's an n-digit number):
Then again, the regex seems pretty straightforward.my ($user, $token, $login) = split(/\s(\d{11})\s/, $line, 2); (my $username = $user) =~ s/\s(\w+)$//; # untested construct print "$username, claiming to be $user logged on with token $token, at + $login.\n";
|
|---|