Обнаружение всех смайликов с помощью регулярных выражений в Lua / PCRE / OpenResty - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть регулярное выражение JavaScript , которое соответствует смайликам. Как мне сопоставить одинаковые символы, используя ngx.re.match(), который является частью библиотеки OpenResty для веб-сервера nginx.

Это оригинальное регулярное выражение для сопоставления смайликов в JS:

(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])

1 Ответ

1 голос
/ 08 апреля 2019

В PCRE, \x{####} может использоваться как эквивалент \u####.

JavaScript.

Во-вторых, шаблон JavaScript должен соответствовать кодовым точкам, закодированным с использованием UTF-16. Но поскольку мы будем сопоставлять сами кодовые точки в PCRE, нам нужно «декодировать» суррогатные пары.

После внесения обоих изменений мы получаем:

[\xA9\xAE\x{2000}-\x{3300}\x{1F000}-\x{1FBFF}]

(Я не знаю Lua, поэтому я оставлю это для предоставления строкового литерала, который производит эту строку.)

Обратите внимание, что ваш шаблон больше соответствует тому, что большинство людей считают эмодзи. Emojis находятся в блоке "Смайлики". Этот блок (в настоящее время) охватывает кодовые точки U + 1F600 до U + 1F64F. В Perl вы можете использовать \p{Block=Emoticons} или даже просто \p{Emoticons}, чтобы сопоставить их, но они, похоже, не поддерживаются PCRE. Чтобы соответствовать только смайликам, вы должны использовать следующее:

[\x{1F600}-\x{1F64F}]
...