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
In reply to left-non-greedy regex? by dash2
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |