我正在使用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>
如何修改正则表达式以创建这些结果?

最佳答案

这是@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>

关于php - 如何将标签文本转换为标签超链接?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6495871/

10-10 03:21