Reputation: 139
I have a string like this:
(link)there is link1(/link), (link)there is link2(/link)
Now i want to set the links that it look like this:
<a href='there is link1'>there is link1</a>, <a href='there is link2'>there is link2</a>
I tried with preg_replace but the result is an error (Unknown modifier 'l'
)
preg_replace("/\(link\).*?\(/link\)/U", "<a href='$1'>$1</a>", $return);
Upvotes: 2
Views: 1332
Reputation: 626691
You actually are not far from the correct result:
/
before link
(else, it will be treated as a regex delimiter and ruin your regex completely).*?
(so that you could later refer to with $1
)U
as it will make .*?
greedyHere is my suggestion:
\(link\)(.*?)\(\/link\)
And PHP code:
$re = '/\(link\)(.*?)\(\/link\)/';
$str = "(link)there is link1(/link), (link)there is link2(/link)";
$subst = "<a href='$1'>$1</a>";
$result = preg_replace($re, $subst, $str);
echo $result;
To also urlencode()
the href
parameter, you can use the preg_replace_callback
function and manipulate the $m[1]
(capture group value) inside it:
$result = preg_replace_callback($re, function ($m) {
return "<a href=" . urlencode($m[1]) . "'>" . $m[1] . "</a>";
}, $str);
Upvotes: 4