PHP正则表达式 - 用超链接替换文本

时间:2011-08-02 11:12:27

标签: php regex

我目前正在研究一些定制的博客软件。在管理面板下,用户可以创建一个帖子,然后PHP应解析与我的模式匹配的任何文本,并相应地用实时超链接替换它。它适用于简单的帖子,但是当给出一个大帖子时,创建的超链接比文本链接更多,并扩展到整个文本段落。

这是我的PHP:

function TextToLinks($input)
{
    $pattern = "/www\.(.*)\.(.*?)(\s|$)/";
    return preg_replace_callback($pattern, "Utilities::LinksCallback", $input);
}

function LinksCallback($matches)
{
    return "<a href='http://{$matches[0]}'>{$matches[0]}</a>";
}

我无法弄清楚如何使模式更严格。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这不是匹配超链接的好方法。如果链接已经完全形成(例如,海报已经将http://放在它前面,它将会中断,并且它将错过所有不以www.开头的链接。

如果这不是问题,您可能会使用/\bwww\.(\S*)\.(\S*)\b/

\S仅允许非空格字符匹配,\b断言匹配在字边界处开始/结束。

有关更多背景信息,请阅读this blog post by Jan Goyvaerts

答案 1 :(得分:1)

将非贪婪的旗帜?也添加到第一个.*

$pattern = "/www\.(.*?)\.(.*?)(\s|$)/";