2014-09-20 88 views
1

讓我明確我想實現的邏輯。PHP preg_match_all:在其中找到帶有「@word」或「#word」的字符串

  1. 我有許多意見和主題詞在DB
  2. 我想通過正規快件,以匹配評論主題詞。
  3. 匹配單詞將在數據庫中查詢並獲取他們的topicid並應用主題評論標籤雲生成目的。

但任何開頭「@」和「」在如preg_match_all模式不得到是如何工作的話。

$pattern = '/\b(\@abdulcollo|tuskys|\#teamBata|50\% off|baby|\@mystic_false)\b/i'; 

$string = 'Anga lonely everyday RT @Mystic_False: Heehe @AbdulCollo aneno ka idhi tuskys in lonely bana #TeamBata in Kakamega baby! @danaceda @kibalimoreithi @olivermathenge @batakenya @ Tuskys Mega Mall 50% off'; 

prag_match_all($pattern, $string, $matches); 

var_dump($ matched)return below array。

$matches = array('tuskys', 'baby', '50% off'); 

,但我也想有'@abdulcollo''#TeamBata''@Mystic_False',我逃脫了 「@」 和 「#」,但他們仍然沒有得到匹配...!

任何幫助非常感謝,我想純PHP的邏輯。

注意:創建標籤字紋,也降低整體評論字符串時,我小寫家居例如,小寫的話,那麼這沒有任何問題。

回答

0

這是因爲字邊界\b。非單詞字符和非單詞字符之間不存在單詞邊界。因此,改變你的正則表達式,

(?:\b|\B)(@abdulcollo|tuskys|#teamBata|50% off|baby|@mystic_false)\b 

DEMO

+0

由於阿維納什這是工作的另一個修復程序我只是刪除** \ b **從我的正則表達式'(@abdulcollo | tuskys | #teamBata | 50% off | baby | @mystic_false)'現在工作正常。 – 2014-09-20 15:08:29