使用preg replace来格式化url

时间:2012-04-28 09:43:15

标签: php regex preg-replace

我有一个正则表达式,它接受像bbcode这样的字符串并将其转换为html链接。它工作正常。但是,我想让它检测链接的类型(内部/外部)来决定是否严格使用绝对(外部)网址,如http://extsite.com/category/keyword/或使用内部网址的部分,如category/keyword/并将其附加到预定义的网址$url . category/keyword/

正则表达式如下:

preg_replace('/\[([^\]]+)\]\[([^\]"]+)\]/i', '<a href="$2">$1</a>', $text)

任何建议都将非常感谢。

1 个答案:

答案 0 :(得分:1)

根据您的评论,我将假设任何以http://(或任何类似协议,例如ftp://)开头的链接都是绝对链接。任何其他链接将被视为相对链接(并将以$ url为前缀)

// replace absolute links
$text = preg replace ('/\[([^\]]+)\]\[([A-Za-z]+:\/\/[^\]"]+)\]/i',
                      '<a href="$2">$1</a>', $text )


// replace all remaining (relative) links
// $url must have a tailing slash '/'
$text = preg replace ('/\[([^\]]+)\]\[([^\]"]+)\]/i',
                      '<a href="'.$url.'$2">$1</a>', $text )