You seem to misunderstand how regular expressions work. There is no such thing as right-non-greedy or left-non-greedy. There is only "does this expression match?" In the case that it does not, the regular expression engine advances one character and tries again (recursive, and quite a bit more complicated than that).

What you describe as "right-non-greedy" is really just "first match, left-to-right, non-greedy." The exact request you are making seems to be "first match, right-to-left, non-greedy", which is really:

my $str = "tar a rat at ararat"; reverse($str) =~ /ta(.*?)ta/; print scalar(reverse($1)), "\n"; # prints: " arar\n"

Note that not only must the string be matched backwards, but the regexp itself must be backwards. What you are really asking for is a regular expression engine that begins matching from the last position in the string, and matches the regular expression in reverse order. This sort of thing has been talked about for Perl 6, and I think there is at least one CPAN module to automate reversing a regular expression.


In reply to Re: left-non-greedy regex? by MarkM
in thread left-non-greedy regex? by dash2

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.