I came across this thread whilst looking to do something more complex. Essentially the most general regex case where the replacement might have $1 etc in it. Thought I'd post my solution, along with the comments I put in my code (note that the e(vals) aren't a concern for my usage, but others might want to guard against injection):
# We want to replace the $nth match of $regex in $value # with $replacement # OK, so doing the nth regex replacement in a string just # isn't going to be that readable, but at least it's # concise. I'll try to explain: # As we go through the regex matches we want to count # down from $nth to zero being when we want to replace. # $& is just what we matched, so we'll write that when # we're not replacing ie when $nth!=0. # qq{} is just quotation that saves us escaping ' or " in # the quotation string. # So here we're creating a string where $replacement is # parsed into quotations eg --$nth ? $& : qq{new text $1} $rep_eval = "--\$nth ? \$& : qq{$replacement}"; # Then here we have our usual regex search and replace # which we perform g(lobally) and e(val) twice. # 1st e(val) parses $rep_eval, and the 2nd evaluates the # "<if> ? <true> : <false>" expression for each match. $value =~ s/$regex/$rep_eval/gee;

In reply to Re: Replace the nth occurence by Anonymous Monk
in thread Replace the nth occurence by Anonymous Monk

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.