【问题标题】:Parsing hashtags in twitter API PHP在 twitter API PHP 中解析主题标签
【发布时间】:2013-03-12 18:43:29
【问题描述】:

我想从我从 twitter 检索到的推文中解析主题标签。现在,我没有在 api 中找到任何可用的东西。所以,我正在使用 php 自己解析它。我已经尝试了几件事。

<?php
$subject = "This is a simple #hashtag";
$pattern = "#\S*\w";
preg_match_all($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
?>

我也试过

$pattern = "/[#]"."[A-Za-z0-9-_]"."/g";

然后它显示 /g 不被 php 识别。我已经尝试了很长时间,但我无法做到这一点。所以请帮忙。

附: : 我对常规表达式知之甚少。

【问题讨论】:

  • 第一个不起作用,因为您没有指定分隔符,开头和结尾的斜线。 PHP 无法识别g-flag,因为 preg_match_all 自动匹配所有出现(这就是该标志的作用)。你可能想试试/#[a-z0-9\-_]+/i?注意:i-flag 使正则表达式不区分大小写。
  • /g == _all in preg_match_all()。首先,您忘记了正则表达式的分隔符,其次,您使用了错误的修饰符。如果这些事情得到解决,这两个中的任何一个都可以正常工作。
  • 非常感谢。有用。其实我也试过“/[#][A-Za-z0-9-]/”。然后它说没有指定分隔符。然后我尝试了“/[#][A-Za-z0-9-][/\t]”.. 然后它说未知修饰符''。
  • 但是如果我想指定我正在搜索的正则表达式的结尾怎么办。 “/[#][A-Za-z0-9-][/\t]”有什么问题吗?

标签: php regex twitter hashtag


【解决方案1】:

这对我有用:

$subject = "This is a simple #hashtag hello world #hastag2 last string #hashtag3";
$pattern = "/(#\w+)/";
preg_match_all($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);

【讨论】:

  • 非常感谢。有用。但它与“/[#][A-Za-z0-9-]/”有什么不同?
  • 这也将匹配非主题标签单词中间的主题标签。
【解决方案2】:

您需要考虑主题标签可能出现的位置。分三种情况:

  • 在推文的开头,
  • 在空格之后,
  • 在单词中间 - 这不能算作标签。

所以这将正确匹配它们:

'/(^|\s)\#\w+/'

解释:

  • ^ 可以用在 OR 语句中
  • \s 用于捕捉空格、制表符和换行符

完整代码如下:

<?php
$subject = "#hashtag This is a simple #hashtag hello world #hastag2 last string not-a-hash-tag#hashtag3 and yet not -#hashtag";
$pattern = "/(?:^|\s)(\#\w+)/";
preg_match_all($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
?>

【讨论】:

  • 好的。非常感谢。我刚刚阅读了有关正则表达式的更多信息。谢谢。 :)
【解决方案3】:

使用对象原型有一种更简单的方法,写了一篇文章详细说明了如何不仅使用 hastags,还使用推文中的用户名和 URL 来做到这一点。 a project 需要它我正在研究从 Twitter API 获取推文的地方。

https://benmarshall.me/parse-twitter-hashtags/

下面是相关代码:

// Auto-link URLs in a string
// Usage: mystring.parseURL()
String.prototype.parseURL = function() {
  return this.replace(/[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&~\?\/.=]+/g, function( url ) {
    return url.link( url );
  });
};

// Auto-link Twitter usernames in a string
// Usage: mystring.parseUsername()
String.prototype.parseUsername = function() {
  return this.replace(/[@]+[A-Za-z0-9-_]+/g, function( u ) {
    var username = u.replace("@","");

    return u.link( 'http://twitter.com/' + username );
  });
};

// Auto-link Twitter hashtags in a string
// Usage: mystring.parseHashtag()
String.prototype.parseHashtag = function() {
  return this.replace(/[#]+[A-Za-z0-9-_]+/g, function( t ) {
    var tag = t.replace("#","%23");

    return t.link( 'http://search.twitter.com/search?q=' + tag );
  });
};

【讨论】:

    猜你喜欢
    • 2012-10-21
    • 2012-01-20
    • 2014-01-12
    • 2020-11-17
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多