Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从tweet中将RT(retweet)和@UserName作为标签过滤_Php_Regex - Fatal编程技术网

Php 从tweet中将RT(retweet)和@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

我正在扫描推特,看看它们是否是转发。转发约定是“RT@UserName”(我假设大家都知道:-),例如:

每当我遇到转发,我都会尝试在推文数据库中查找原始推文:

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
}