在twitterapiphp中解析hashtag

在twitterapiphp中解析hashtag,php,regex,twitter,hashtag,Php,Regex,Twitter,Hashtag,我想解析我从twitter检索的tweet中的hashtags。现在,我在api中找不到任何可用的内容。所以,我自己用php解析它。我试过几种方法 <?php $subject = "This is a simple #hashtag"; $pattern = "#\S*\w"; preg_match_all($pattern, $subject, $matches, PREG_OFFSET_CAPTURE); print_r($matches); ?> 但是它显示/g不被php识

我想解析我从twitter检索的tweet中的hashtags。现在,我在api中找不到任何可用的内容。所以,我自己用php解析它。我试过几种方法

<?php
$subject = "This is a simple #hashtag";
$pattern = "#\S*\w";
preg_match_all($pattern, $subject, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
?>
但是它显示/g不被php识别。我已经尝试这么做了很长一段时间了,但是我不能这么做。所以请帮忙

附言:我对日常生活不太了解。

这对我来说很有用:

$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);

您需要考虑Hash标签可能出现在何处。有三种情况:

  • 在推特的开头
  • 在空白之后
  • 在一个单词的中间-这不能算作hashtag
因此,这将正确匹配它们:

'/(^|\s)\#\w+/'
说明:

  • ^
    可用于或语句中
  • \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);
?>

使用对象原型有一种更简单的方法,在一篇文章中详细介绍了如何使用hastag,以及tweet中的用户名和URL来实现这一点。需要它,因为我正在从Twitter API抓取推文

以下是相关代码:

// 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 );
  });
};

第一个不起作用,因为没有指定分隔符、开头和结尾的斜杠。PHP无法识别
g
-标志,因为preg\u match\u all会自动匹配所有事件(这就是该标志的作用)。您可能想试试
/#[a-z0-9\-\\+/i
?注意:
i
-标志使正则表达式不区分大小写。
/g
==在
preg\u match\u all()中的
\u all
。在第一个例子中,您忘记了正则表达式的分隔符,在第二个例子中,您有一个错误的修饰符。如果这些问题得到解决,这两个选项中的任何一个都可以正常工作。非常感谢。它起作用了。实际上我也试过“/[#][A-Za-z0-9-]”。然后它说没有指定分隔符。然后我尝试了“/[#][A-Za-z0-9-][/\t]”。。然后它说未知修饰符“”。但是如果我想指定我正在搜索的regexp的结尾,该怎么办呢。“/[#][A-Za-z0-9-][/\t]”有什么问题吗?非常感谢。它起作用了。但是它与“/ [α] [AZ-Z09- -] ]不同吗?这也将匹配中间的单词,而不是哈希提语。好的。谢谢。我只是读了更多关于正则表达式的内容。谢谢。:)
// 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 );
  });
};