2016-08-30 2 views
0

У меня есть строка, как: -Extract 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

Наивный подход: 'str_replace ("\ ud83d \ ude1b \ ud83d \ ude44", "\ ud83d \ ude1b \ ud83d \ ude44", $ s)'. –

+0

@ WiktorStribiżew, ему также необходимо извлечь присутствие eacch emoji в String. Строка генерирует динамический. Таким образом, шаблон emoji, шаблон строки может отличаться. – Saswat

+0

Является ли 'Jax \' частью строки emoji? – protld

ответ

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 экстракт все Emojis в массив - $mtchs (1).

Затем для (2) preg_replace вставляет пробел между ними, если есть спина к спине emojis (или, вернее, две буквы в Юникоде, за которыми следует начало другого - \u).

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

 Смежные вопросы

  • Нет связанных вопросов^_^