2011-01-20 78 views
3

我想處理Lua中的日語詞彙表(LuaTeX具體)。詞彙存儲在要讀取的文本文件中。在讀取字應該由正則表達式匹配的文件的每一行(行被寫入,如: | がくせい | student |):Lua中的日語正則表達式

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

無論如何,有沒有可能得到日本的話?

回答

4

您不能使用%a。它僅匹配一個字節(語言環境相關,但通常只有一個字節編碼的ASCII或Latin-1的一封信。)

要匹配你需要打破他們成字節的範圍UTF-8編碼的字母,如示例here中那樣。

例如一些模式爲UTF-8編碼的平假名可能包括:

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

的模式來匹配所有 Unicode字母的完整列表(這需要包括數百子範圍),將笨重。

+0

如何使用string.gsub來匹配CJK字符? – northtree 2014-07-22 09:31:16

1

我不是Lua大師,但我認爲你可能不走運。實際上,Lua不會「原生地」使用Unicode文件。它只是把它看作是一系列字節,並沒有對它做任何解釋。特別是,你的gmatch()調用不可能做你想做的事情。

最近在郵件列表上有一個關於i18n的大討論here。這個討論here也可能有所幫助。