Извлеките все хэштеги из твита в функции PHP


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

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

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

#\S*\w
Author: Community, 2010-06-17

6 answers

$tweet = "this has a #hashtag a  #badhash-tag and a #goodhash_tag";

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

var_dump( $matches );

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

 31
Author: Cups, 2010-09-06 03:35:29

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

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

    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
)
 28
Author: trante, 2013-05-17 12:36:17

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

$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} - любое немаркированное пространство (акценты, умлауты и т.д.)

 11
Author: minaz, 2016-02-19 05:41:19

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

function get_hashtags($tweet)
{
    $matches = array();
    preg_match_all('/#\S*\w/i', $tweet, $matches);
    return $matches[0];
}
 4
Author: BoltClock, 2010-06-17 10:08:30

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

/#[^\s]*/i

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

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

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

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

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

 4
Author: Wireblue, 2010-06-17 10:08:36
 1
Author: Thaha kp, 2014-06-04 13:06:57