【一】匹配 @用戶名
首先分析下微博中從哪裏開始到哪裏結束纔是一個完整的用戶名,按照常規的表現形式,通常是以@開頭,以:結尾,中間爲用戶的名稱。
匹配表達式就可寫爲: @[^::]+
這是簡單的寫法,可是有些是在微博以後再@的,還有就是連續@的狀況,還有些是以逗號等結束的,所以完善一下
修改成: @[^,,::\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'
【二】匹配 #話題#
這個相對相對就簡單了不少,先後都是#,以#號開始並以#結束
匹配表達式寫爲: #[^#]+#