好的,所以我对正则表达式很恐怖,需要一些帮助。我发现此代码与推特用户名匹配:
'/(?<=^|\s)@([a-z0-9_]+)/i
这在大多数情况下都有效,除非在@username之前放置HTML标记,例如:
<p>@username</p>
这对我来说是一个问题,因为它会发生在我正在做的事情上。
然后有这个,它可以工作,但也检测电子邮件地址,这不是我想要的:
/^[A-Za-z0-9_]+$/
有什么想法吗?
答案 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。