在 Lua/PCRE/OpenResty 中使用正则表达式检测所有表情符号

Detect all the emojies using regex in Lua/PCRE/OpenResty

我有一个 JavaScript regex that matches emojies. How do I match the same characters using ngx.re.match(),它是 nginx 网络服务器的 OpenResty 库的一部分。

这是在 JS 中匹配表情符号的原始正则表达式:

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

在 PCRE 中,\x{####} 可以等效于 JavaScript 的 \u####

其次,JavaScript 模式旨在匹配使用 UTF-16 编码的代码点。但是由于我们将匹配 PCRE 中的代码点本身,我们需要 "decode" 代理对。

完成这两项更改后,我们得到:

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

(我不知道 Lua,所以我会留下它来提供生成此字符串的字符串文字。)

请注意,您的图案比大多数人认为的表情符号更匹配。表情符号位于 "Emoticons" 块中。这个块(当前)跨越代码点 U+1F600 到 U+1F64F。在 Perl 中,您可以使用 \p{Block=Emoticons} 甚至只是 \p{Emoticons} 来匹配这些,但 PCRE 似乎不支持这些。因此,要仅匹配表情符号,您需要使用以下内容:

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