2.20. Insert the Regex Match into the Replacement Text
Problem
Perform a search-and-replace that converts URLs into HTML
links that point to the URL, and use the URL as the text for the link.
For this exercise, define a URL as “http:”
and all nonwhitespace characters that follow it. For instance,
Please visit
http://www.regexcookbook.com becomes Please
visit <a
href="http://www.regexcookbook.com">http://www.regexcookbook.com</a>.
Solution
Regular expression
http:\S+
| Regex options: None |
| Regex flavors: .NET, Java, JavaScript, PCRE, Perl, Python, Ruby |
Replacement
<a●href="$&">$&</a>| Replacement text flavors: .NET, JavaScript, Perl |
<a●href="$0">$0</a>| Replacement text flavors: .NET, Java, XRegExp, PHP |
<a●href="\0">\0</a>| Replacement text flavors: PHP, Ruby |
<a●href="\&">\&</a>| Replacement text flavor: Ruby |
<a●href="\g<0>">\g<0></a>| Replacement text flavor: Python |
Discussion
Inserting the whole regex match back into the replacement text is an easy way to insert new text before, after, or around the matched text, or even between multiple copies of the matched text. Unless you’re using Python, you don’t have to add any capturing groups to your regular expression to be able to reuse the overall match.
In Perl, «$&» is actually a variable. Perl
stores the overall regex match in this variable after each successful
regex match. Using «$&» adds a performance penalty to
all your regexes in Perl, so you may prefer to wrap your whole regex in
a capturing group and use a backreference to that group instead.
.NET and ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access