Извлеките строку эмоций \ ud83d \ ude1b \ ud83d \ ude44 из данной строки:

У меня есть строка, как: —

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\ude1b а также Jax \ud83d\ude1b,
  2. Смайлики всегда могут отличаться, так как они приходят из БД. Как разбить каждый шаблон эмодзи на пары?

0

Решение

Я не совсем уверен, что вы хотите, но это показывает, как (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 вставляет пробел между ними, если есть спина к спине смайликов (или, точнее, * две буквы в юникоде, за которыми следует начало другой — \u).

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]