2012-02-11 38 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数组中的元素中。