用于将用户名转换为Twitter等链接的正则表达式

时间:2010-04-24 19:03:16

标签: php regex twitter

在推特中

当你写@moustafa 将更改为<a href='user/moustafa'>@moustafa</a> 现在我想要做同样的事情 写@moustafa + space时,只改变@moustafa

5 个答案:

答案 0 :(得分:3)

您正在寻找与@username匹配的正则表达式,其中用户名没有空格?您可以使用:

@[^ ]+

如果您知道用户名中允许的字符,则可以更具体,例如,如果它们必须是字母数字:

@[A-Za-z0-9]+

答案 1 :(得分:3)

可以使用的一个正则表达式(从另一个答案中提到的@anywhere javascript library无耻地被盗)将是:

\B\@([a-zA-Z0-9_]{1,20})

这会查找非字边界(以防止a@b [即电子邮件]匹配),然后是@,然后是该字符类中的1到20个(包括)字符。当然,任何 - 除了空间路线,如在其他答案中;它在很大程度上取决于@label的标签部分允许的值(dis)。

要在PHP中使用突出显示的正则表达式,可以使用以下内容替换字符串$subject

$subject = 'Hello, @moustafa how are you today?';
echo preg_replace('/\B\@([a-zA-Z0-9_]{1,20})/', '<a href="user/$1">$0</a>', $subject);

以上输出如下:

Hello, <a href="user/moustafa">@moustafa</a> how are you today?

答案 2 :(得分:0)

为什么不使用Twitter最近发布的@anywhere javascript library

答案 3 :(得分:0)

PHP中的正则表达式只是以相同字符开头和结尾的字符串。按照惯例,这个角色是/

所以你可以使用这样的东西作为任何一个php正则表达式函数的参数:

不是空格:

"/[^ ]+/" 

仅限字母数字:

"/[A-Za-z0-9]+/"

答案 4 :(得分:0)

有几个库可以为您执行此选择和链接。目前我在mzsanford的Github帐户下了解Java,Ruby和PHP库:http://github.com/mzsanford/twitter-text-rb