【一】匹配 @用户名
首先分析下微博中从哪里开始到哪里结束才是一个完整的用户名,按照常规的表现形式,通常是以@开头,以:结尾,中间为用户的名称。
匹配表达式就可写为: @[^::]+
这是简单的写法,可是有些是在微博以后再@的,还有就是连续@的状况,还有些是以逗号等结束的,所以完善一下
修改成: @[^,,::\s@]+
可是这些匹配都是从形式上进行了一个大概的归类,可是为了更为严谨,就要完全分析其用户名的具体格式,例如新浪微博中的用户名格式为是“4-30个字符,支持英文、数字、"_"或减号”
,也就是说,支持中文、字母、数字、下划线及减号,而且是4到30个字符(这里暂且认为汉字为一个字符)那么在写匹配的表达式的时候就能够这么来写:
@[\u4e00-\u9fa5a-zA-Z0-9_-]{4,30}
转换为php可用正则:
preg_match_all('/@([\\x{4e00}-\\x{9fa5}a-zA-Z0-9-_]{2,30})+/u', $content, $matches)
若须要带小数点:
'/@([\\x{4e00}-\\x{9fa5}a-zA-Z0-9-_\.]{2,30})+/u'
【二】匹配 #话题#
这个相对相对就简单了不少,先后都是#,以#号开始并以#结束
匹配表达式写为: #[^#]+#