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.

If you found this post helpful, please consider sharing to your network. I'm also available to help you be successful with your distributed systems! Please reach out if you're interested in working with me, and I'll be happy to schedule a free one-hour consultation.