Intereting Posts
Как получить несколько строк из базы данных в PHP PHP: перевести POST в простые переменные? Показать все строки в таблице mysql, а затем дать возможность удалить определенные Получить процентное значение процента процессора в php HTML-диалог подтверждения формы отправки формы Взаимное исключение PHP в файле / MySQL, считывание и выполнение операторов из файла с использованием perl получить массив значений столбцов в codeigniter Невозможно создать абстрактный класс … в appDevDebugProjectContainer.php – Symfony2 Laravel 4 Проверка формы, расширение метода __call () Создание алгоритма сворачивания баннеров для поворота рекламы Пользовательская сортировка mysql по полю Как добавить пробел в строку заглавными буквами, но сохранить непрерывные капиталы вместе с помощью PHP и Regex? Foreach с многомерным массивом – Laravel Blade templating Проверка JavaScript AJAX загруженных ресурсов с помощью Mink / Zombie в PHP? Получать сообщения с фильтром сообщений Ajax с флажками с несколькими выделениями

Получить все хэштеги из твита в функции PHP

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

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

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

#\S*\w 

Solutions Collecting From Web of "Получить все хэштеги из твита в функции PHP"

 $tweet = "this has a #hashtag a #badhash-tag and a #goodhash_tag"; preg_match_all("/(#\w+)/", $tweet, $matches); var_dump( $matches ); 

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

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

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

     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 ) 

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

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

Используйте preg_match_all() :

 function get_hashtags($tweet) { $matches = array(); preg_match_all('/#\S*\w/i', $tweet, $matches); return $matches[0]; } 

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

 /#[^\s]*/i 

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

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

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

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

EDIT : Я пробовал ваше регулярное выражение, и он отлично работал!