dash2 has asked for the wisdom of the Perl Monks concerning the following question:
my $str = "tar a rat at ararat";
A match:
$str =~ /at(.*)at/; # captures " at arar"
The same, but non-greedy:
$str =~ /at(.*?)at/; # captures just" "
You might call this "right-non-greedy". Where it matches, it matches, and grabs as little as possible to the right of that.
So what would be the best (shortest, most comprehensible and complete) way to write a "left-non-greedy" match? I.e.
$str =~ /at($magic_match)at/; # matches " arar"
where $magic_match matches at the last place possible, so that it has to grab as little as possible?
Head spinning now... how about a regex that is both right-and-left-non-greedy. I.e. it tries to grab as little as possible, both by matching minimally, and by trying to match as late as possible - and compares all the possibilities to find the shortest?
(I'm looking for generic solutions here - a regex, or at least a way to write regexes, that would work for left- or both- non-greedy matching on any string.)
andramoiennepemousapolutropon
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
•Re: left-non-greedy regex?
by merlyn (Sage) on Mar 25, 2003 at 17:39 UTC | |
by zby (Vicar) on Mar 26, 2003 at 09:51 UTC | |
by merlyn (Sage) on Mar 26, 2003 at 14:45 UTC | |
by zby (Vicar) on Mar 26, 2003 at 15:08 UTC | |
|
Re: left-non-greedy regex?
by MarkM (Curate) on Mar 25, 2003 at 23:00 UTC | |
|
Re: left-non-greedy regex?
by diotalevi (Canon) on Mar 25, 2003 at 17:42 UTC | |
|
Re: left-non-greedy regex?
by dash2 (Hermit) on Mar 25, 2003 at 17:33 UTC | |
by Paladin (Vicar) on Mar 25, 2003 at 18:18 UTC |