in reply to Greediness of * vs. greediness of +
This is a "further" question re the replies from moritz and Marshall.
And in following their answers, I found it helpful to remember that "greedy" is not the same as "global." While (b*) is greedy, it is not global, /(b*)/g. In other words (I thought) /(b*)/ stops after the first (moritz caught this)failure success , at the start of the string, whereas adding the /g would tell the regex engine to keep on trying until it reaches the end of the string.
Well, that was my second thought.
But, OOOPS,
"abbbbc"=~/(b*)/g && print "Found: $1"; # Found:
Huh?
Well, is this a case where the rules are different in substitution?
my $string1 = "abbbbc"; my $found1 = $string1 =~ s/(b*)/^/g; print "\$string1: $string1, \$found1: $found1"; $found1 is 4 =head after s/// $string: ^a^^c^ At begin of string ...no "b" found | # satisfies "0 or more 'b's" "a" (duh!) | Two "b"(s) found | # likewise; the first and second 'b's ar +e conflated? and again | "c" | no "b" after "c" | =cut
That this code produces two replacements for the string of four 'b's remains a puzzle. Why does this appear (this may be my error) that the regex conflates two 'b's rather than all four?
Enlightenment?
or Coffee?
Update: Wonderful answer below. s/failure/success/ per moritz; italics closed per ssandv.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Greediness of * vs. greediness of +
by moritz (Cardinal) on Sep 08, 2010 at 13:07 UTC | |
by JavaFan (Canon) on Sep 08, 2010 at 13:57 UTC |