【一】匹配 @用戶名 首先分析下微博中從哪里開始到哪里結束才是一個完整的用戶名,按照常規的表現形式,一般是以@開頭,以:結尾,中間為用戶的名稱。 匹配表達式就可寫為: @[^::]+ 這是簡單的寫法,但是有些是在微博之后再@的,還有就是連續@的情況,還有些是以逗號等結束的,因此完善一下 修改為: @[^,,::\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' 【二】匹配 #話題# 這個相對相對就簡單了很多,前后都是#,以#號開始並以#結束 匹配表達式寫為: #[^#]+#