PHP从字符串中提取Emoji [英] php extract Emoji from a string

查看:25
本文介绍了PHP从字符串中提取Emoji的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含表情符号的字符串。 我想从该字符串中提取表情符号,我正在使用下面的代码,但它不是我想要的。

$string = "😃 hello world 🙃";

preg_match('/([0-9#][x{20E3}])|[x{00ae}x{00a9}x{203C}x{2047}x{2048}x{2049}x{3030}x{303D}x{2139}x{2122}x{3297}x{3299}][x{FE00}-x{FEFF}]?|[x{2190}-x{21FF}][x{FE00}-x{FEFF}]?|[x{2300}-x{23FF}][x{FE00}-x{FEFF}]?|[x{2460}-x{24FF}][x{FE00}-x{FEFF}]?|[x{25A0}-x{25FF}][x{FE00}-x{FEFF}]?|[x{2600}-x{27BF}][x{FE00}-x{FEFF}]?|[x{2900}-x{297F}][x{FE00}-x{FEFF}]?|[x{2B00}-x{2BF0}][x{FE00}-x{FEFF}]?|[x{1F000}-x{1F6FF}][x{FE00}-x{FEFF}]?/u', $string, $emojis);

我想要这个:

$emojis =  ["😃", "🙃"];

但返回此消息:

$emojis = ["😃"]

也如果:

$string = "😅😇☝🏿"
它只返回第一个表情符号

$emoji = ["😅"]

推荐答案

尝试查看preg_match_all函数。preg_match在找到第一个匹配项后停止查找,这就是为什么您只能拿回第一个表情符号的原因。

取自this answer:

preg_match停止查找第一个匹配项。另一方面,preg_match_all继续查找,直到处理完整个字符串。找到匹配项后,它将使用字符串的其余部分尝试应用另一个匹配项。

http://php.net/manual/en/function.preg-match-all.php

因此您的代码将变为:

$string = "😃 hello world 🙃";

preg_match_all('/([0-9#][x{20E3}])|[x{00ae}x{00a9}x{203C}x{2047}x{2048}x{2049}x{3030}x{303D}x{2139}x{2122}x{3297}x{3299}][x{FE00}-x{FEFF}]?|[x{2190}-x{21FF}][x{FE00}-x{FEFF}]?|[x{2300}-x{23FF}][x{FE00}-x{FEFF}]?|[x{2460}-x{24FF}][x{FE00}-x{FEFF}]?|[x{25A0}-x{25FF}][x{FE00}-x{FEFF}]?|[x{2600}-x{27BF}][x{FE00}-x{FEFF}]?|[x{2900}-x{297F}][x{FE00}-x{FEFF}]?|[x{2B00}-x{2BF0}][x{FE00}-x{FEFF}]?|[x{1F000}-x{1F6FF}][x{FE00}-x{FEFF}]?/u', $string, $emojis);

print_r($emojis[0]); // Array ( [0] => 😃 [1] => 🙃 ) 

这篇关于PHP从字符串中提取Emoji的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆