Home: Perl Programming Help: Frequently Asked Questions:
What does it mean that regexps are greedy? How can



Jasmine
Administrator

Mar 15, 2001, 6:03 AM


Views: 28771
What does it mean that regexps are greedy? How can

What does it mean that regexps are greedy? How can I get around it?

Most people mean that greedy regexps match as much as they can. Technically speaking, it's actually the quantifiers (?, *, +, {}) that are greedy rather than the whole pattern; Perl prefers local greed and immediate gratification to overall greed. To get non-greedy versions of the same quantifiers, use (??, *?, +?, {}?).

An example:


Code
        $s1 = $s2 = "I am very very cold"; 
$s1 =~ s/ve.*y //; # I am cold
$s2 =~ s/ve.*?y //; # I am very cold

Notice how the second substitution stopped matching as soon as it encountered ``y ''. The *? quantifier effectively tells the regular expression engine to find a match as quickly as possible and pass control on to whatever is next in line, like you would if you were playing hot potato.