Calling a Function From Within Preg_replace
Regular expressions are awesome. However, sometimes doing everything in them is extremely difficult, or impossible. Luckily, we can flex the power of preg_replace’s ’e’ option to execute the replacement string as PHP code.
The reason why I found this is was I was looking for a suitable URL auto-linker that could shorten the url to a certain length. I found several examples on PHP.net, but unfortunately none of them did a good job of shortening the URL, or formatting it in a special way. This particular example is a simplified version of my auto-linker.
Consider this code:
function URL_Link( $txt)
{
$replacement = "'<a xhref=\"\\1\">' . GetHost(\"\\1\") . '</a>'";
$txt = preg_replace( "/((http|ftp)+(s)?:\/\/[^<>\s\)\]]+)/ie",
$replacement , $txt );
return $txt;
}
function GetHost($url)
{
$arr = parse_url( $url );
$result = $arr['scheme'] . "://" . $arr['host'];
return $result;
}
The text of the replacement can include functions which can be passed the preg matches. Calling URL_Link will auto link all the urls in a block of text.