我正在扫描推文,看他们是否转发。转发约定是“RT @UserName”(我假设我们都知道:-)示例:
$tweet = "RT @SeekingAlpha: Best Stock Bargains";
每当我遇到转发时,我都会尝试在推文数据库中找到原始推文:
function _process_retweets($tweet) {
if (substr($tweet, 0, 2) == "RT") {
$original = preg_replace("/^RT +@[^ :]+:? */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
答案 0 :(得分:1)
只需从正则表达式中删除“字符串开头”控制字符:
/^RT +@[^ :]+:? */ui
变为/RT +@[^ :]+:?/ui
并使用preg_match在字符串中找到它:
preg_match('/RT +@[^ :]+:?/ui', $tweet, $retweets);
if (count($retweets) > 0)
{
// we have re-tweets
}
此外,将正则表达式修改为'/RT +@[^ :]+:?(.*)/ui'
,您可以将推文名称(Best Stock Bargains)捕获到$retweets
数组中的元素中。