Romeo Theriault am Donnerstag, 7. September 2006 22:42: > Hello, I'm trying to match this line (or more than one) starting from > the words "user picard..." > > 8/28/2006 1:04:41 PM: Retrieving mail from host mail.maine.edu > [130.111.32.22], user picard... > 8/28/2006 1:04:45 PM: Mail retrieval failed, reason: POP3 Host did > not acknowlege password and returned following error: -ERR [AUTH] > Invalid login > > > Using this regular expression: > > user (\w+(\.\w+)?(\.\w+)?)\.\.\.\n\d{1,2}\/\d{1,2}\/\d{4} \d{1,2}:\d > {2}:\d{2} (A|P)M: Mail retrieval failed, reason: POP3 Host did not > acknowlege password and returned following error: -ERR \[AUTH\] > Invalid login > > I seem to be matching it in ActiveState's regular expression toolkit, > but when I try running the code it doesn't match the lines. I've > tracked it down to the new line character after the three dots at the > end of the first line. But I can't figure out how to get past it. The > \n don't work. I've tried using chomp and then removing the new line > character but it still doesn't match. > > Below is my code that I'm trying to get working and can't seem to get > that regex. Any pointers that any has would be appreciated. Thank you. > > Romeo > > > > #!/usr/bin/perl -w > > use strict; > my %saw; > my @dup_array; > > # Open the file for reading and if cannot die and give error message. > open LOG, "c:\\Documents and Settings\\romeok\\desktop\\perl\ > \CopyofPOPconSrv.log" > or die "Cannot open file for reading: $!"; > > > # While the file is open read through it and remove new line characters. > # Look for the memory variable $1 and push it into the > # @dup_array. > > while (<LOG>) {
reads *one* line > if (/user (\w+(\.\w+)?(\.\w+)?)\.\.\.\n\d{1,2}\/\d{1,2}\/\d{4} \d > {1,2}:\d{2}:\d{2} (A|P)M: Mail retrieval failed, reason: POP3 Host > did not acknowlege password and returned following error: -ERR \[AUTH > \] Invalid login/) { tries to match *two lines* > push @dup_array, $1; > } > } > > # When done close the file. > close LOG; > > > > # These two lines remove duplicates from the array. > undef %saw; > my @no_dup_array = grep(!$saw{$_}++, @dup_array); > > > > # For each item in the array print it out. > # Actually use this to send an email instead. > foreach (@no_dup_array) { #Uses $_ by default > print "$_\n"; > } Hope this helps Dani -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>