求个新浪微博@正则

@开始遇到空格或特殊字符或到结尾的匹配
@开始1到10个字匹配。

内容内容@用户名 @user啊发的发士大夫@people

匹配:用户名,people

========还是自己搞定吧……

数据:
内容内容@用户名 @user啊发的发士大夫@people@中文啊我超过十个我超过十个我超过十个我超过十个我超过十个字了哦。

PHP不支持\L、\l、\N。

正则表达式:
/@([\x{4e00}-\x{9fa5}\w]+){3,10}/u
匹配结果:
array (size=2)
  0 => 
    array (size=4)
      0 => string '@用户名' (length=10)
      1 => string '@user啊发的发士大夫' (length=26)
      2 => string '@people' (length=7)
      3 => string '@中文啊我超过十个我超过十个我超过十个我超过十个我超过十个字了哦' (length=94)
  1 => 
    array (size=4)
      0 => string '名' (length=3)
      1 => string '夫' (length=3)
      2 => string 'e' (length=1)
      3 => string '哦' (length=3)

貌似不支持字数的限制……= =不知道哪里出了问题。现在勉强获取到以后然后在挨个用mb_strlen来判断字数后再查询数据库。

阅读 8.6k
5 个回答
/@[a-zA-Z0-9_\-\u4e00-\u9fa5]{1,20}(?=[^a-zA-Z0-9_\-\u4e00-\u9fa5]|$)/g

@([a-zA-z0-9_]+)

匹配中文曾经做过,原则上使用连续两个都是0X80开头的字符
"@([0x80-0xFF][0x80-0xFF]){min,max}"

英文字符的上面已经提出了,下面把答案整合一下,或许这并不是最优解
"@(([0x80-0xFF][0x80-0xFF])|\w){min,max}"

/\B@([\w-]+)/
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进