On 5/31/07, Sharan Basappa <[EMAIL PROTECTED]> wrote:
Thanks Chas ..
I was wondering about the first regex str =~ m/m(.*i)(.*pi)/;
did not match all the way till mississip. In fact my initial understanding
was that the regex would match mississippi leaving nothing for second
regex. Can you throw some light on this ..

On 5/31/07, Chas Owens <[EMAIL PROTECTED]> wrote:
> On 5/31/07, Sharan Basappa <[EMAIL PROTECTED]> wrote:
> snip
> > $str =~ m/m(.*i?)(.*pi)/;
> snip
>
> ? only means non-greedy when following a * or a +.  When it follows a
> pattern it means optional.

Nope, because then the match will fail.  Greediness will not cause the
match to fail; it only affects how much of the string is matched.

#!/usr/bin/perl

use strict;
use warnings;

$_ = "abababab";

print "trying /(a.*b)/g\n";
my $i = 1;
while (/(a.*b)/g) {
       print "\t$i: $1\n";
       $i++;
}

print "trying /(a.*?b)/g\n";
$i = 1;
while (/(a.*?b)/g) {
       print "\t$i: $1\n";
       $i++;
}

print "trying /(a.+b)/g\n";
my $i = 1;
while (/(a.+b)/g) {
       print "\t$i: $1\n";
       $i++;
}

print "trying /(a.+?b)/g\n";
$i = 1;
while (/(a.+?b)/g) {
       print "\t$i: $1\n";
       $i++;
}

prints

trying /(a.*b)/g
       1: abababab
trying /(a.*?b)/g
       1: ab
       2: ab
       3: ab
       4: ab
trying /(a.+b)/g
       1: abababab
trying /(a.+?b)/g
       1: abab
       2: abab

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


Reply via email to