【问题标题】:php extract Emoji from a stringphp从字符串中提取表情符号
【发布时间】:2017-12-31 13:17:37
【问题描述】:

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

$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()

标签: php regex preg-match telegram emoji


【解决方案1】:

尝试查看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] => ? ) 

【讨论】:

  • 谢谢,我想要的,
  • @Miladranjbar 没问题! :)
  • 我如何使用它来将所有表情符号包装在一个跨度中?
  • @rassoh,您应该问自己的问题,说明您尝试过什么以及遇到了什么问题。
  • 太棒了,我花了几个小时才找到这样的东西。它甚至可以找到特殊的表情符号,例如❤! (❤❤❤谢谢!❤❤❤ :)
猜你喜欢
  • 1970-01-01
  • 2016-05-26
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 2022-06-22
  • 1970-01-01
  • 2014-06-24
相关资源
最近更新 更多