Синтаксический анализ хэштегов в Twitter API PHP
Я хочу проанализировать хэштеги из твитов, которые я получаю из 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. Я уже довольно давно пытаюсь это сделать, но у меня не получается. Поэтому, пожалуйста, помогите.
P.S.: У меня очень слабое представление о регулярных экспериментах.
3 answers
Вам нужно подумать, где может появиться хэштег. Есть три случая:
- в начале твита,
- после пробела,
- в середине слова - это не должно считаться хэштегом.
Так что это будет соответствовать им правильно:
'/(^|\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);
?>
Это работает для меня:
$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);
Есть более простой способ использовать прототипы объектов, написал пост с подробным описанием того, как это сделать не только с помощью хэштегов, но и имен пользователей и URL-адресов в твитах. Это было необходимо для проекта, над которым я работаю, где я получаю твиты из API Twitter.
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 );
});
};