hi amit --   
 
In a message dated 3/2/2007 4:54:57 P.M. Eastern Standard Time,  
[EMAIL PROTECTED] writes:
 
> hello,
> Thanks for your previous reponses.
> Now this  time i am using the right syntax for matching, for the string 
like:
>  
> 
> $temp= "XXXXAAAZZZZBBBSSSSCCCGGGGBBBVVVVVBBB"
> 
>  I need to write a regex for filterin out the string between.
> 
>  AAA
> BBB
> CCC
> 
> so in the above case i should have  the output as:
> 
> 
> AAAZZZZZBBB
>  BBBSSSSSSCCC
> CCCGGGGBBB
> BBBVVVVVBBB
> meaning all  combinations of start and end for AAA BBB CCC.
> 
> I have the regex  for one of them but how do i do it simultaneously for
> all 3 of  them.
> 
> 
>  $temp='XXXXAAAZZZZBBBSSSSCCCGGGGBBBVVVVVBBB';
> 
> @t = ($temp  =~/(AAA)(.*?)(BBB)/g);
> foreach (@t)
> {
> 
> print  $_;
> 
> }
> 
> Am not able to figure out how will go  about when just after the match
> i need to match for
>  BBBSSSSCCC.
> 
> Any suggestions
> 
> 
>  Thanks


try this:   
 
C:[EMAIL PROTECTED]>perl -we "use strict;  my $dna=  
'XXXXAAAZZZZBBBSSSSCCCGGGGBBBVVVVVBBBAAA';
my $starter = qr(AAA | BBB |  CCC)x;  my $stopper = qr(AAA | BBB | CCC)x;  my 
@seq;
while ($dna  =~ / ($starter) (.*?) ($stopper) /gx) { push @seq, qq($1$2$3);  
pos($dna) =  $-[3]; };
print qq({$_} \n) for  @seq"
{AAAZZZZBBB}
{BBBSSSSCCC}
{CCCGGGGBBB}
{BBBVVVVVBBB}
{BBBAAA}
 
the trick is resetting the search position in the body of the while  loop.   
as far as i know, there is 
no way to do this purely from within a regex.   
i defined two separate patterns for starting and stopping a subsequence  even 
though the actual 
groups are identical; it may serve if the groups ever differ.   
note that the above also captures the ``empty'' test case i added at  the 
end.   if you do not want this, 
try this instead (the  (.*?)  becomes  (.+?)):   
 
C:[EMAIL PROTECTED]>perl -we "use strict;  my $dna=  
'XXXXAAAZZZZBBBSSSSCCCGGGGBBBVVVVVBBBAAA';
my $starter = qr(AAA | BBB |  CCC)x;  my $stopper = qr(AAA | BBB | CCC)x;  my 
@seq;
while ($dna  =~ / ($starter) (.+?) ($stopper) /gx) { push @seq, qq($1$2$3);  
pos($dna) =  $-[3]; };
print qq({$_} \n) for  @seq"
{AAAZZZZBBB}
{BBBSSSSCCC}
{CCCGGGGBBB}
{BBBVVVVVBBB}


hth --   bill walters   
 

<BR><BR><BR>**************************************<BR> AOL now offers free 
email to everyone.  Find out more about what's free from AOL at 
http://www.aol.com.
_______________________________________________
ActivePerl mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to