2012-02-11 37 views
0

我正在掃描推文以查看它們是否轉推。該銳推約定爲「RT @用戶」(我假設大家都知道:-)例子:將過濾RT(轉推)和@UserName作爲鳴叫標籤

$tweet = "RT @SeekingAlpha: Best Stock Bargains"; 

每當我遇到一個轉推,我試圖找到原來的鳴叫在推特的數據庫:

function _process_retweets($tweet) { 
    if (substr($tweet, 0, 2) == "RT") { 
    $original = preg_replace("/^RT [email protected][^ :]+:? */ui", "", $tweet); 
    $id_str = false; 
    $id_str = db_result(db_query("SELECT id_str FROM tweets WHERE text = '%s'", $original)); 
    $tag = ($id_str != false) ? '{RT:' . $id_str . '}' : '{RT}'; 
    return preg_replace("/^RT/ui", $tag, $tweet); 
    } 
    else { 
    return $tweet; 
    } 
} 

這將返回:

{RT:3423124} @SeekingAlpha: Best Stock Bargains 

現在,我所遇到的不同的格式,誰不要將「RT」的鳴叫的開頭:

$tweet = "Wow! Look at this - RT @SeekingAlpha: Best Stock Bargains"; 

現在,我的功能不再工作了。我會掃描「RT」,但我可能還會看到類似「我是對嗎?rt?」作爲轉推指標。所以我將不得不尋找整個約定:推文中任何地方的「RT @ UserName」。這樣做的最佳方式是什麼,以便輸出爲

Wow! Look at this - {RT:4326565} @SeekingAlpha: Best Stock Bargains 

回答

1

剛剛從你的正則表達式中刪除 「字符串的開始」 控制字符:

/^RT [email protected][^ :]+:? */ui成爲/RT [email protected][^ :]+:?/ui

而且使用的preg_match找到它在字符串中

preg_match('/RT [email protected][^ :]+:?/ui', $tweet, $retweets); 
if (count($retweets) > 0) 
{ 
    // we have re-tweets 
} 

此外,修改正則表達式爲'/RT [email protected][^ :]+:?(.*)/ui'您將鳴叫名稱(Best Stock Bargains)捕獲到$retweets數組中的元素中。