[tpm] Greedy regex question
Jim Graham
james.a.graham at gmail.com
Fri Feb 29 08:24:50 PST 2008
Hi
It's not really greedy, per-se. It's what you are asking for. Find
the first "(" followed by any character(s), followed by a ")" at the
end of the string. Greedy/non-greedy means, basically, given a
starting point, go as far as you can (greedy) or go as short as you
can (non-greedy). By forcing the last ")" to be at the end of the
string, they become the same thing. Note non-greedy doesn't mean find
the shortest possible match (which is what you want).
I will try to come up with a solution you want.
- jim
On 29-Feb-08, at 11:07 AM, Madison Kelly wrote:
> Hi all,
>
> Given the string:
>
> $val="0 (0x0) (int)";
>
> Why does:
>
> $val=~s/\(.*?\)//;
>
> Properly, ungreedily, return "0 (int)" *but*, changing it to:
>
> $val=~s/\(.*?\)$//;
>
> Wrongly, greedily, return "0 "? When I put the '.*?' in brackets
> and
> print '$1' on the later it is indeed grabbing "0x0) (int".
>
> What is it about anchoring the regex to the end of the string cause
> it to be a greedy regex again? As you can probably gather, I am trying
> to get rid of /only/ the last '(foo)' in a given string.
>
> Thanks!
>
> Madi
> _______________________________________________
> toronto-pm mailing list
> toronto-pm at pm.org
> http://mail.pm.org/mailman/listinfo/toronto-pm
More information about the toronto-pm
mailing list