php 从字符串中提取表情符号

标签 php regex preg-match telegram 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 stops looking after the first match. preg_match_all, on the other hand, continues to look until it finishes processing the entire string. Once match is found, it uses the remainder of the string to try and apply another match.

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 从字符串中提取表情符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45306245/

相关文章:

php - 我想更新两个表中的值

python - 查找以特定符号开头,然后连续出现特定单词和模式的多个匹配项

Javascript 删除 html 内容中的\n 或\t,pre 标签内除外

python - Python 上的 SHA-512 验证

php - Mysql 'WHERE'方法比较

php - 如何在 Laravel 中使用相同的 Blade 模板对一个 Controller 进行添加和编辑操作?

php - 正则表达式匹配 Php 中的多个模式

PHP preg_match_all 不返回任何内容

php - 将电影名称和年份与电影文件名分开

php - 无法在 Symfony2 2.4 中安装 SonataUserBundle