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>


Reply via email to