On Oct 29, 2006, at 7:56 PM, Dennis G. Wicks wrote:
Shawn Milochik wrote:
This seems to work for me:
#!/usr/bin/perl -w
use strict;
while (<STDIN>) {
chomp;
print "Original: $_\n";
$_ =~ s/^([EMAIL PROTECTED])(@.+&\d+&)([&]{5})/$1$2$1$3/;
print "Modified: $_\n";
}
Hope it helps.
Shawn
Thanks Shawn!
That works perfectly!
I just might get finished by Monday AM.
Now I just need to figure out how it works
so I don't beat my head against the desk so much
the next time I need to do something like this.
Regards,
Dennis
-
Dennis,
^([EMAIL PROTECTED]) = Take everything starting from the beginning of the line as
long as it doesn't contain an @.
Literally: Match one or more characters if not the @ character.
Thanks to "greedy matching," the fact that the next part of the
regular expression begins with the @ means that you'll get every
single character up to that @.
(@.+&\d+&) = From the @, take everything up until you hit an &
followed by one or more digits, followed by another ampersand.
Literally: Match @, then any character (.) for one or more (+), then
& then a digit (\d) one or more of them (+) then &.
([&]{5}) = Match exactly five & characters in a row.
Literally: Match exactly five & in a row.
In each case, the section is surrounded by parenthesis. These
parenthesis allow you to refer to $1, $2, and $3 in the substitution.
$1 is whatever is in the first set of parenthesis, and so on.
I very highly recommend "Mastering Regular Expressions" by Jeffrey
Friedl. I think that's the best way to learn, and the book is very
easy to follow. The third edition was just released.
Shawn
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>