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



我目前正在开发一些定制的博客软件。在管理面板下,用户可以创建一个帖子,然后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>";
}

我想不出怎样才能使这个图案更严格。

谢谢你的帮助

将非贪婪标志?也添加到第一个.*上。

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

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

如果这不是问题,你可以用/bwww.(S*).(S*)b/

S只允许非空白字符匹配,并且b断言匹配在单词边界处开始/结束。

有关更多背景信息,请阅读Jan Goyvaerts的博客文章

最新更新