preg_replace和多个域的数组

时间:2010-11-13 19:09:49

标签: php regex preg-replace

我有一个这样的数组:

$array =  array('domain1.com','domain2.net','domain3.org');

是否只能将这些域替换为与preg_replace的链接?

目前有这个小功能,但解析所有域:

                function insert_referer($text){
                    $text = preg_replace('#(script|about|applet|activex|chrome):#is', "\\1:", $text);
                    $ret = ' ' . $text;
                    $ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret);
                    $ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret);
                    $ret = substr($ret, 1);
                    return $ret;
                }         

1 个答案:

答案 0 :(得分:0)

此代码可以满足您的需求:

$array = array('domain1.com','domain2.net','domain3.org');
$text = 'Some text including domain1.com/something and http://domain3.org';
echo preg_replace('/((?:https?:\/\/)?(?:' . implode('|', $array) . ')[-a-zA-Z0-9\._~:\/?#\[\]@\!\$&\'\(\)\*\+,;=]*)/', '\1', $text);
// Outputs:
// "Some text including <a href="domain1.com/something">domain1.com/something</a> and <a href="http://domain3.org">http://domain3.org</a>"

我没有测试代码本身,所以它可能(我认为不会,但它可能)包含拼写错误,但我测试了regexp本身并且它运行良好。