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

时间:2016-08-30 09:41:43

标签: php regex unicode utf-16

我有一个字符串: -

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

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

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. 用户可以在任何正常单词后留下任何空格,也可以只输入表情符号。我的意思是,Jax\ud83d\ude1bJax \ud83d\ude1b
  2. 表情符号可能总是有所不同,因为它们来自数据库。如何将每个表情符号模式分成两对?

1 个答案:

答案 0 :(得分:1)

我不完全确定你想要什么,但这显示了如何(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在它们之间插入一个空格,如果有背对背的表情符号(或者更确切地说是*两个unicode字母后跟另一个的开头 - \u)。

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