如何在 LUA 5.1 中将没有空格的表情字符串分开

我想使用 LUA 5.1 的分割函数来将没有空格的表情字符分开,并在它们之间添加空格,但是我做不对。所以我用了这种方式,但是是错误的:

#!/usr/bin/env lua

local text = "‍‍‍‍‍⌚↔"
for emoji in string.gmatch(text, "[%z\1-\127\194-\244][\128-\191]*") do
    io.write(emoji .. " ")
end

在浏览器Firefox 65中查看!

我的错误结果:⌚ ↔

期望的结果:‍‍‍ ‍‍ ⌚ ↔

点赞
用户6834680
用户6834680
local text = "‍‍‍‍‍⌚↔"
for emoji in text
   :gsub("(.)([\194-\244])", "%1\0%2")
   :gsub("%z(\240\159\143[\187-\191])", "%1")
   :gsub("%z(\239\184[\128-\143])", "%1")
   :gsub("%z(\226\128\141)%z", "%1")
   :gmatch"%Z+"
do
   print(emoji)
end

本地的文本变量为 "‍‍‍‍‍⌚↔",通过下方代码对其进行处理并输出。

其中具体的处理过程如下:先将文本中的字符分为两类,一类为1个字节的字符,另一类为2个或3个字节的字符。通过 gsub 函数将1个字节的字符和后面的2或3个字节的字符分别拼接为一个完整的字符,并在它们中间添加一个空字符,便于后续处理。之后,将这些完整字符中的表情Unicode范围符合规则的字符提取出来,输出到终端。

最终输出的结果如下:

?
↔
2019-03-20 14:22:20