Possible Duplicate:
Need a good regex to convert URLs to links but leave existing links alone
This is a my sample input:
http://www.website.com/1/
Click here http://www.website.com/2/ or visit the website: http://www.website.com/3/
or http://www.website.com/4/
http://www.website.com/5/
I want a PHP function that converts the URLs inside the text into tags, like so:
<a href="http://www.website.com/1/">http://www.website.com/1/</a>
Click <a href="http://www.website.com/2/">here</a> or visit the website: <a href="http://www.website.com/3/">http://www.website.com/3/</a>
or <a href="http://www.website.com/4/">http://www.website.com/4/</a>
<a href="http://www.website.com/5/">http://www.website.com/5/</a>
There is a catch on line 2: if the URL is preceded by the word here then the word should be used as the anchor text instead. I need to do this in PHP. I think preg_replace with /e switch might help me accomplish this task but I am not sure. This is the (borrowed) regex I’ve used so far:
preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret);
// ^---- I've tried adding "|here "
// But I cannot get the order of \\1 and \\2 right
Please advice.
The number of the capturing groups are in the order of the opening brackets, so the first opening bracket will always be
$1. If you don’t want that, use named groups.For your problem you can try this regex
It will have “here” in
$1and the link in$2. If “here” is not found then$1is empty.See it here on Regexr
So, then you need to replace dependent on the content of
$1. If it is empty then replace the match withelse with
I think this should be possible using preg_replace_callback