John's will only work if the next string is the same as the last string. If you 
mix up the strings it does not work.

sarge-plain:~#  perl -le'
my $data = q[aaaaaa
cccccc
bbb
cccccc
aaaaaa
];
print $data;
$data =~ s/(.*\n)(?=\1)//g;
print $data;
'
aaaaaa
cccccc
bbb
cccccc
aaaaaa

aaaaaa
cccccc
bbb
cccccc
aaaaaa

while Chas' will work for repeating and duplicate strings. 
#!/usr/bin/perl

use strict;
use warnings;

my %h;
while (<DATA>) {
        print unless $h{$_}++
}

__DATA__
AAAAAAAAAAAAA
NNNNNNNNNNN
BBBBBBBBB
CCCCCCCCC
AAAAAAAAAAAAA
NNNNNNNNNNN
BBBBBBBBB
CCCCCCCCC
AAAAAAAAAAAAA
AAAAAAAAAAAAA
AAAAAAAAAAAAA
NNNNNNNNNNN
NNNNNNNNNNN
NNNNNNNNNNN
BBBBBBBBB
BBBBBBBBB
BBBBBBBBB
CCCCCCCCC
CCCCCCCCC
CCCCCCCCC

sarge-plain:~# ./temp.pl
AAAAAAAAAAAAA
NNNNNNNNNNN
BBBBBBBBB
CCCCCCCCC

Tony Heal


> -----Original Message-----
> From: John W. Krahn [mailto:[EMAIL PROTECTED]
> Sent: Tuesday, June 12, 2007 3:20 PM
> To: Perl beginners
> Subject: Re: regex for matching repeated strings
> 
> yitzle wrote:
> > Issues with both methods:
> >
> > John's doesn't work for this data:
> > aaaaaa
> > aaaaaa
> > bbb
> > cccccc
> > cccccc
> >
> > I would expect:
> > aaaaaa
> > bbb
> > cccccc
> >
> > I would get:
> > aaaaaa
> > bbb
> > cccccc
> > cccccc
> 
> It works for me:
> 
> $ perl -le'
> my $data = q[aaaaaa
> aaaaaa
> bbb
> cccccc
> cccccc
> ];
> print $data;
> $data =~ s/(.*\n)(?=\1)//g;
> print $data;
> '
> aaaaaa
> aaaaaa
> bbb
> cccccc
> cccccc
> 
> aaaaaa
> bbb
> cccccc
> 
> 
> 
> 
> John
> --
> use Perl;
> program
> fulfillment
> 
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> http://learn.perl.org/



-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to