Lua中日语的正则表达式

时间:2011-01-20 16:13:56

标签: regex unicode lua cjk

我想在Lua中处理日语词汇(LuaTeX具体)。词汇表存储在要读取的文本文件中。在读取文件的每一行时,单词应该用正则表达式匹配(行写成: | がくせい | student |):

function readFile(fn)
   local file = assert(io.open(fn, "r"))
   local contents = file:read("*a")
   file:close()
   return contents
end

function processTest(contents)
   for line in contents:gmatch("%a+") do
      print(line)
   end
end

a = readFile("vocabulary.org")
processTest(a)

现在的问题是只打印英文单词:

student

我必须提到我是Lua和LuaTeX的新手,所以如果有更好的方法,我会很高兴知道。

无论如何,是否有可能获得日语单词?

2 个答案:

答案 0 :(得分:4)

您无法使用%a。它只匹配一个八位字节(与语言环境相关,但通常只有一个字节,用于编码ASCII或Latin-1中的字母。)

要匹配UTF-8编码的字母,您需要将它们分解为字节范围,如示例here中所示。

例如,UTF-8编码的平假名的某些模式可能包括:

(\227\129[\129-\191])
(\227\130[\128-\160])

匹配所有 unicode字母(需要包含数百个子范围)的模式的完整列表将是不实用的。

答案 1 :(得分:1)

我不是Lua大师,但我认为你可能不走运。 Lua不会“原生”地使用Unicode文件。它只是将它所读取的内容视为一系列字节,并且不对其进行任何解释。特别是,您的gmatch()调用不太可能达到您想要的效果。

最近在邮件列表上对i18n进行了大量讨论here。此讨论here也可能有所帮助。