我有一个这样的数组:
$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;
}
答案 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本身并且它运行良好。