У меня есть строка, как: —
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?
Итак, что нужно было сделать: —
Jax\ud83d\ude1b
а также Jax \ud83d\ude1b
,Я не совсем уверен, что вы хотите, но это показывает, как (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));
Других решений пока нет …