Ответ 1
$tweet = "this has a #hashtag a #badhash-tag and a #goodhash_tag";
preg_match_all("/(#\w+)/", $tweet, $matches);
var_dump( $matches );
* Десны - это незаконные символы для хэштегов, недопустимые символы подчеркивания.
Я хочу получить все хэштеги из твита, используя функцию PHP.
Я знаю, что кто-то задал аналогичный вопрос здесь, но нет никакой подсказки, как точно реализовать это в PHP. Поскольку я не очень хорошо знаком с регулярными выражениями, не знаю, как написать функцию, которая возвращает массив всех хэштегов в твите.
Итак, как это сделать, используя следующее регулярное выражение:
#\S*\w
$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} - числовой символ в любом script
\ p {L} - письмо с любого языка
\ p {Mn} - любое немаркирующее пространство (акценты, умлауты и т.д.)
Попробуйте это регулярное выражение:
/#[^\s]*/i
Запуск PHP выглядел бы так:
preg_match_all('/#[^\s]*/i', $tweet_string, $result);
В результате получается массив, содержащий все хэштеги в Tweet (сохраненный как "$ result" - третий аргумент).
Наконец, проверьте этот сайт. Я нашел, что это действительно удобно для тестирования регулярных выражений. http://regex.larsolavtorvik.com/
РЕДАКТИРОВАТЬ: я пробовал ваше регулярное выражение, и он отлично работает!
Используйте функцию preg_match_all()
:
function get_hashtags($tweet)
{
$matches = array();
preg_match_all('/#\S*\w/i', $tweet, $matches);
return $matches[0];
}
Использовать пакет twitter-text-php
.