匹配Twitter @username,但不匹配电子邮件

时间:2011-11-18 00:54:39

标签: php regex twitter

好的,所以我对正则表达式很恐怖,需要一些帮助。我发现此代码与推特用户名匹配:

'/(?<=^|\s)@([a-z0-9_]+)/i

这在大多数情况下都有效,除非在@username之前放置HTML标记,例如:

<p>@username</p>

这对我来说是一个问题,因为它会发生在我正在做的事情上。

然后有这个,它可以工作,但也检测电子邮件地址,这不是我想要的:

/^[A-Za-z0-9_]+$/

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

如果html标记结束>是问题所在,请将其添加到您的lookbehind组:

'/(?<=^|\s|>)@([a-z0-9_]+)/i

答案 1 :(得分:1)

正如克莱夫所说,首先strip_tags()。然后你可以直接在用户名上进行(未经测试)匹配。

$subject = strip_tags( '<p>@taylorbuley</p>' );
$matches = array();
preg_match( '/$@[A-Za-z0-9_]+^/', $subject, $matches );
var_dump( $matches );

$匹配行的开头,而^匹配行的结尾,因此上面的示例可能适合您的示例。如果是这样,可以省略它们。

要获得更全面的观点,请查看how Twitter does it in JavaScript