Php 从tweet中将RT(retweet)和@UserName作为标签过滤
我正在扫描推特,看看它们是否是转发。转发约定是“RT@UserName”(我假设大家都知道:-),例如: 每当我遇到转发,我都会尝试在推文数据库中查找原始推文:Php 从tweet中将RT(retweet)和@UserName作为标签过滤,php,regex,Php,Regex,我正在扫描推特,看看它们是否是转发。转发约定是“RT@UserName”(我假设大家都知道:-),例如: 每当我遇到转发,我都会尝试在推文数据库中查找原始推文: function _process_retweets($tweet) { if (substr($tweet, 0, 2) == "RT") { $original = preg_replace("/^RT +@[^ :]+:? */ui", "", $tweet); $id_str = false; $id
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的开头:
$tweet = "Wow! Look at this - RT @SeekingAlpha: Best Stock Bargains";
现在,我的函数不再工作了。我会扫描“RT”,但我也可能会看到“我是对的吗?RT?”之类的东西作为转发指示器。所以我必须在推特的任何地方寻找整个约定:“RT@UserName”。实现这一点的最佳方法是什么,以使输出
Wow! Look at this - {RT:4326565} @SeekingAlpha: Best Stock Bargains
?只需从正则表达式中删除“字符串开头”控制字符:
/^RT+@[^:::+:*/ui
变成/RT+@[^:::+:?/ui
并使用preg_match在字符串中查找它:
preg_match('/RT +@[^ :]+:?/ui', $tweet, $retweets);
if (count($retweets) > 0)
{
// we have re-tweets
}
此外,将正则表达式修改为”/RT++[^:::+:?(.*)/ui'
可以将tweet名称(最佳股票交易)捕获到$retweets
数组中的一个元素中
preg_match('/RT +@[^ :]+:?/ui', $tweet, $retweets);
if (count($retweets) > 0)
{
// we have re-tweets
}