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