我正在尝试创建一个与 UTF-8 编码输入中的任何 Unicode 标点符号匹配的 LPeg 模式。我想出了以下 Selene Unicode 和 LPeg 的结合:
local unicode = require("unicode")
local lpeg = require("lpeg")
local punctuation = lpeg.Cmt(lpeg.Cs(any * any^-3), function(s,i,a)
local match = unicode.utf8.match(a, "^%p")
if match == nil
return false
else
return i+#match
end
end)
这似乎有效,但它会错过由几个 Unicode 代码点组合而成的标点符号(如果存在这样的字符),因为我只提前读取 4 个字节,它可能会降低解析器的性能,并且它是未定义的库match
函数会做,当我给它一个包含矮小的 UTF-8 字符的字符串时(尽管它现在似乎可以工作)。
我想知道这是否是一种正确的方法,或者是否有更好的方法来实现我想要实现的目标。