On Jul 29, Pine Yan said:

        line1:  $string3 = "bacdeabcdefghijklabcdeabcdefghijkl";
        line2:  $string4 = "xxyyzzbatttvv";

        line3:  print "\$1 = $1 [EMAIL PROTECTED],$+[0]}, \$& = $&\n" 
if($string3
=~ /(a|b)*/);
        line4:  print "\$1 = $1 [EMAIL PROTECTED],$+[0]}, \$& = $&\n" 
if($string4
=~ //);

        $1 = a @{0,2}, $& = ba
        $1 =  @{0,0}, $& =

The regex says "match zero or more of (a or b)". In string 1, it matches a 'b' and then an 'a' at the beginning, thus $& = 'ba'. In string 2, it matches zero characters (because it's allowed to!) at the beginning, thus $& eq ''.

        print "\$1 = $1 [EMAIL PROTECTED],$+[0]}, \$& = $&\n" if($string3 =~
/(a|b)+/);

        $1 = a @{0,2}, $& = ba
        $1 = a @{6,8}, $& = ba

Now your regex says "match one or more of (a or b)". Thus in string 2, you're matching the "ba" in the middle.

HOWEVER, you're doing something weird. You have a QUANTIFIER (the * or the +) on a CAPTURING GROUP. Here's an example of the weirdness:

  "japhy" =~ /(.)+/;
  print $1;

What do you think that prints? It prints 'y'. Why? Because when you put a quantifier on a capturing group, ONLY THE LAST REPETITION of that capturing group gets saved. This is why you're getting only ONE letter in $1.

--
Jeff "japhy" Pinyan         %  How can we ever be the sold short or
RPI Acacia Brother #734     %  the cheated, we who for every service
http://japhy.perlmonk.org/  %  have long ago been overpaid?
http://www.perlmonks.org/   %    -- Meister Eckhart

--
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