我目前正在研究一些定制的博客软件。在管理面板下,用户可以创建一个帖子,然后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>";
}
我无法弄清楚如何使模式更严格。
感谢您的帮助。
答案 0 :(得分:1)
这不是匹配超链接的好方法。如果链接已经完全形成(例如,海报已经将http://
放在它前面,它将会中断,并且它将错过所有不以www.
开头的链接。
如果这不是问题,您可能会使用/\bwww\.(\S*)\.(\S*)\b/
。
\S
仅允许非空格字符匹配,\b
断言匹配在字边界处开始/结束。
有关更多背景信息,请阅读this blog post by Jan Goyvaerts。
答案 1 :(得分:1)
将非贪婪的旗帜?
也添加到第一个.*
。
$pattern = "/www\.(.*?)\.(.*?)(\s|$)/";