Получить все хэштеги из твита в функции PHP - PullRequest
23 голосов
/ 17 июня 2010

Я хочу получить все хэштеги из твита, используя функцию PHP.

Я знаю, что кто-то задавал похожий вопрос здесь , но нет никаких подсказок, как именно реализовать это в PHP,Поскольку я не очень хорошо знаком с регулярными выражениями, не знаю, как написать функцию, которая возвращает массив всех хэштегов в твите.

Итак, как мне это сделать, используя следующее регулярное выражение:

#\S*\w

Ответы [ 5 ]

32 голосов
/ 17 июня 2010
$tweet = "this has a #hashtag a  #badhash-tag and a #goodhash_tag";

preg_match_all("/(#\w+)/", $tweet, $matches);

var_dump( $matches );

* Тире являются недопустимыми символами для хэштегов, допускается подчеркивание.

31 голосов
/ 17 мая 2013

Я создал свое собственное решение.Он делает:

  • Находит все хэштеги в строке
  • Удаляет дубликаты
  • Сортирует хэштеги по количеству существующих в тексте
  • Поддерживает символы Юникода

    function getHashtags($string) {  
        $hashtags= FALSE;  
        preg_match_all("/(#\w+)/u", $string, $matches);  
        if ($matches) {
            $hashtagsArray = array_count_values($matches[0]);
            $hashtags = array_keys($hashtagsArray);
        }
        return $hashtags;
    }
    

Вывод выглядит так:

(
    [0] => #_ƒOllOw_
    [1] => #FF
    [2] => #neslitükendi
    [3] => #F_0_L_L_O_W_
    [4] => #takipedeğerdost
    [5] => #GönüldenTakipleşiyorum
)
15 голосов
/ 19 февраля 2016

Не забывайте о хэштегах, которые содержат Unicode, числовые значения и подчеркивания:

$tweet = "Valid hashtags include: #hashtag #NYC2016 #NYC_2016 #gøypålandet!";

preg_match_all('/#([\p{Pc}\p{N}\p{L}\p{Mn}]+)/u', $tweet, $matches);

print_r( $matches );

\ p {Pc} - для соответствия подчеркивания

\ p {N} - числовой символв любом сценарии

\ p {L} - буква на любом языке

\ p {Mn} - любое пространство без пометок (акценты, умлауты и т. д.)

5 голосов
/ 17 июня 2010

Попробуйте это регулярное выражение:

/#[^\s]*/i

Или используйте это, если несколько хеш-тегов соединены вместе (например, # foo # bar).

/#[^\s#]*/i

Запуск PHP будет выглядеть так:

preg_match_all('/#[^\s#]*/i', $tweet_string, $result);

Результатом является массив, содержащий все хэштеги в твите (сохраняются как «$ result» - третий аргумент).

Наконец, проверьте этот сайт. Я нашел это очень удобным для тестирования регулярных выражений. http://regex.larsolavtorvik.com/

РЕДАКТИРОВАТЬ : Я попробовал ваше регулярное выражение, и оно тоже отлично работало!

EDIT 2 : добавлено еще одно регулярное выражение для извлечения хеш-тегов, даже если они последовательны.

4 голосов
/ 17 июня 2010

Используйте функцию preg_match_all():

function get_hashtags($tweet)
{
    $matches = array();
    preg_match_all('/#\S*\w/i', $tweet, $matches);
    return $matches[0];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...