sno*_*pey 24 php regex twitter
我想使用PHP函数从推文中检索所有主题标签.
我知道有人在这里问了一个类似的问题,但没有提示如何在PHP中实现这一点.由于我对正则表达式不是很熟悉,所以不知道如何编写一个函数来返回推文中所有主题标签的数组.
那么我该如何使用以下正则表达式执行此操作:
#\S*\w
Run Code Online (Sandbox Code Playgroud)
Cup*_*ups 33
$tweet = "this has a #hashtag a #badhash-tag and a #goodhash_tag";
preg_match_all("/(#\w+)/", $tweet, $matches);
var_dump( $matches );
Run Code Online (Sandbox Code Playgroud)
*破折号是标签的非法字符,允许使用下划线.
tra*_*nte 31
我创建了自己的解决方案.它确实:
支持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;
}
Run Code Online (Sandbox Code Playgroud)输出是这样的:
(
[0] => #_ƒOllOw_
[1] => #FF
[2] => #neslitükendi
[3] => #F_0_L_L_O_W_
[4] => #takipede?erdost
[5] => #GönüldenTakiple?iyorum
)
Run Code Online (Sandbox Code Playgroud)
min*_*naz 16
不要忘记包含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 );
Run Code Online (Sandbox Code Playgroud)
\ p {Pc} - 匹配下划线
\ p {N} - 任何脚本中的数字字符
\ p {L} - 来自任何语言的信件
\ p {Mn} - 任何非标记空间(重音符号,变音符号等)
试试这个正则表达式:
/#[^\s]*/i
Run Code Online (Sandbox Code Playgroud)
或者,如果有多个哈希标签连接在一起(例如,#foo#bar),请使用此标签。
/#[^\s#]*/i
Run Code Online (Sandbox Code Playgroud)
运行它的PHP看起来像:
preg_match_all('/#[^\s#]*/i', $tweet_string, $result);
Run Code Online (Sandbox Code Playgroud)
结果是一个包含Tweet中所有标签的数组(保存为“ $ result”-第三个参数)。
最后,看看这个网站。我发现测试正则表达式非常方便。http://regex.larsolavtorvik.com/
编辑:我尝试了您的正则表达式,它也很好用!
编辑2:添加了另一个正则表达式以提取哈希标签,即使它们是连续的。