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

问题描述 投票:0回答:1

我有一个匹配表情符号的JavaScript regex。如何使用ngx.re.match()匹配相同的字符,(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]) 是nginx Web服务器的OpenResty库的一部分。

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

\x{####}
regex lua pcre openresty
1个回答
1
投票

在PCRE中,\u####可以用作JavaScript的[\xA9\xAE\x{2000}-\x{3300}\x{1F000}-\x{1FBFF}]

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

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

\p{Block=Emoticons}

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

请注意,您的模式比大多数人认为的表情符号更匹配。表情符号出现在“表情符号”块中。该块(当前)跨越代码点U + 1F600到U + 1F64F。在Perl中,您可以使用\p{Emoticons}甚至只是[\x{1F600}-\x{1F64F}] 来匹配这些,但这些似乎不受PCRE的支持。为了匹配表情符号,您需要使用以下内容:

qazxswpoi
© www.soinside.com 2019 - 2024. All rights reserved.