PHP @mention使用正则表达式

时间:2014-06-23 07:01:03

标签: php regex

我使用正则表达式将@user名称转换为链接。 例如,如果用户输入@Alex Ferguson,它应该将Alex Ferguson转换为超链接。 在这里,它将第一个名称转换为超链接并排除姓氏。如果第一个名称和姓氏之间没有空格,它可以正常查找更接近@的单词。 有没有办法将名字和姓氏都转换为超链接。

这是我的代码:

 function convert($msg){
 $message = preg_replace(array('/(?i)\b((?:https?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))/', '/(^|[^a-z0-9_])@([a-z0-9_]+)/i', '/(^|[^a-z0-9_])#([a-z0-9_]+)/i'), array('<a href="$1" target="_blank">$1</a>', '$1<a href="">@$2</a>', '$1<a href="index.php?hashtag=$2">#$2</a>'), $msg);
 return $message;
}

谢谢..

1 个答案:

答案 0 :(得分:1)

这方面的一般方法是:

$regex = '~(?i)@[a-z]+[ ][a-z]+~';
$replaced = preg_replace($regex,'<a href="">$0</a>',$string);

备注

  • 我会留下来填写空白
  • 名称的一个问题是允许的字符范围。 Julie O'Hara怎么样? M.C.可可?等