Это суррогатные пары UTF-16, только неправильные. Вторая (нижняя) часть пары должна быть в диапазоне 0xDC00-0xDFFF. Пара преобразуется так:
CodePoint = (HighSurrogate - 0xD800) * 0x400 + LowSurrogate - 0xDC00 + 0x10000
Соответственно, группа \ud83c[\udc00-\udfff] заменяется на [\x{1F000}-\x{1F3FF}]
(0xD83C - 0xD800) * 0x400 + 0xDC00 - 0xDC00 + 0x10000 = 0x1F000
(0xD83C - 0xD800) * 0x400 + 0xDFFF - 0xDC00 + 0x10000 = 0x1F3FF
Аналогично, заменяем \ud83d[\udc00-\udfff] на [\x{1F400}-\x{1F7FF}]
\ud83e[\udc00-\udfff] на [\x{1F800}-\x{1FBFF}]
Группируем, получаем [\x{1F000}-\x{1FBFF}] или полное выражение:
~\x{a9}|\x{ae}|[\x{2000}-\x{3300}]|[\x{1F000}-\x{1FBFF}]~u
https://regex101.com/r/7nipal/1
Только версия PHP должна быть не ниже 7.