从给定字符串中提取 \ud83d\ude1b\ud83d\ude44 表情符号字符串:

Extract \ud83d\ude1b\ud83d\ude44 emoji string from a a given string:

我有一个像这样的字符串:-

Hi, Jax\ud83d\ude1b\ud83d\ude44! can we go for a coffee?

现在,表情符号是 UTF16(我认为)。我需要提取'\ud83d\ude1b\ud83d\ude44'并在每对之间给出一个space,就像这样。

Hi, Jax\ud83d\ude1b \ud83d\ude44! can we go for a coffee?

如何在 PHP 中实现此目的?

我需要的更多示例:-

Hi, Jax\ud83d\ude1b \ud83d\ude44! can we go for\ud83d\ude1b \ud83d\ude44 a coffee?

那么需要做什么:-

  1. 用户可以在任何普通单词后留下也可以不留下任何 space,只需输入表情符号即可。我的意思是,Jax\ud83d\ude1bJax \ud83d\ude1b
  2. 表情符号可能总是不同,因为它们来自 DB。如何将每个表情符号模式拆分成对?

我不太确定你想要什么,但这显示了如何 (1) 和 (2)

$input = 'Hi, Jax\ud83d\ude1b\ud83d\ude44! can we go for a coffee?';

$pattern = '/((?:\\u[\dA-F]{4}){2})/i';
preg_match_all ( $pattern , $input , $mtchs); 
print_r($mtchs);

我真的 不会说话 php,但是 preg_match_all 将所有表情符号提取到一个数组中 - $mtchs (1)。

然后对于 (2) preg_replace 在它们之间插入一个 space 如果有背靠背的表情符号(或者更确切地说 *两个 unicode 字母后跟另一个 - \u).

$pattern = '/((?:\\u[\dA-F]{4}){2})(\\u)/i';
print_r(preg_replace($pattern, ' ', $input));