Lua中针对日语的正则表达式

我想用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的新手,所以如果有更好的方法,我会很高兴知道。

无论如何,有没有可能得到日语单词?

原文链接 https://stackoverflow.com/questions/4749578

点赞
stackoverflow用户241148
stackoverflow用户241148

我不是Lua大师,但我认为你可能运气不佳。Lua不“本地”消耗Unicode文件,它只把它读到的当作一系列字节而不进行任何解释。特别是,你的gmatch()调用不太可能做你想要的。

最近在邮件列表上有一个关于i18n(国际化)的大讨论在这里。这里的讨论在这里也可能有所帮助。

2011-01-20 17:19:46
stackoverflow用户12048
stackoverflow用户12048

你不能使用 %a 来匹配这个。它只能匹配一个八位字节(与本地环境相关,但通常只包含 ASCII 或 Latin-1 编码的字母)。

要匹配 UTF-8 编码的字母,需要将它们分解为字节范围,就像这个 示例 中的示例一样。

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

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

匹配 所有 Unicode 字母的完整模式列表(需要包含数百个子范围)将变得难以处理。

2011-01-20 18:53:50