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;
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: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.