如何将hashtag文本转换为hashtag超链接?

时间:2011-06-27 16:23:22

标签: php regex hyperlink preg-replace hashtag

我正在使用php preg_replace()将任何在其前面带有#标签符号的单词转换为超链接。

类似于:#austin会变成:<a href="/tag/austin">#austin</a>

这是我的正则表达式。

preg_replace('/\B#(\w*[A-Za-z_]+\w*)/', '<a href="/tag/$1">$0</a>', $text);

我的问题是:如果有任何大写字母,href值将保留它们,但我希望href值始终完全小写。

输入:#Austin
不应该成为:<a href="/tag/Austin">#Austin</a>
它应该成为:<a href="/tag/austin">#Austin</a>

如何修改我的正则表达式来创建这些结果?

4 个答案:

答案 0 :(得分:5)

以下是使用@faileN建议的preg_replace_callback的示例:

Demo Link

$string = '#Austin';

function hashtag_to_link($matches)
{
  return '<a href="/tag/' . strtolower($matches[1]) . '">' . $matches[0] . '</a>';
}

echo preg_replace_callback('/\B#(\w*[a-z_]+\w*)/i', 'hashtag_to_link', $string);

// output: <a href="/tag/austin">#Austin</a>

答案 1 :(得分:3)

试试这个:

preg_replace('/\B#(\w*[A-Za-z_]+\w*)/', '<a href="/tag/$1">$0</a>', strtolower($text));

这将强制主题($text)在测试正则表达式之前使用小写。

答案 2 :(得分:2)

您可以使用preg_replace_callbackhttp://de2.php.net/manual/en/function.preg-replace-callback.php

实现这一目标

答案 3 :(得分:1)

理论上你可以使用e修饰符,它允许你在替换字符串中使用PHP函数:

preg_replace('/\B#(\w*[A-Za-z_]+\w*)/e', "'<a href=\"/tag/'.strtolower('$1').'\">$0</a>'", $text);