【问题标题】:Regular Expressions for Japanese in LuaLua中日文的正则表达式
【发布时间】:2011-06-12 14:00:56
【问题描述】:

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

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

【问题讨论】:

    标签: regex unicode lua cjk


    【解决方案1】:

    您不能为此使用%a。它只匹配一个八位字节(取决于语言环境,但通常只匹配一个用 ASCII 或 Latin-1 编码字母的字节。)

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

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

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

    匹配所有个 unicode 字母(需要包含数百个子范围)的完整模式列表会很笨重。

    【讨论】:

    • 如何使用 string.gsub 匹配 CJK 字符?
    【解决方案2】:

    我不是 Lua 大师,但我认为你可能不走运。 Lua 并没有像以前那样“原生地”使用 Unicode 文件。它只是将读取的内容视为一系列字节,而不对其进行任何解释。特别是,您的 gmatch() 调用不太可能执行您想要的操作。

    最近here 邮件列表上有一个关于 i18n 的大讨论。这个讨论here 也可能有帮助。

    【讨论】:

      猜你喜欢
      • 2021-05-21
      • 2014-08-26
      • 1970-01-01
      • 2022-01-11
      • 2023-03-22
      • 2019-01-23
      • 1970-01-01
      • 2018-02-07
      • 1970-01-01
      相关资源
      最近更新 更多