我目前正在從一個網站的腳本收集信息。我不知道是否會string.match能夠接受的正則表達式模式匹配,如以下幾點:在Lua中的string.match和正則表達式,有可能嗎?
string.match(page, "(?:(Phrase One|Phrase Two|Phrase Three|...))")
的問題是,我不知道這是可以做到的,但我願意嘗試解決方案。謝謝!
我目前正在從一個網站的腳本收集信息。我不知道是否會string.match能夠接受的正則表達式模式匹配,如以下幾點:在Lua中的string.match和正則表達式,有可能嗎?
string.match(page, "(?:(Phrase One|Phrase Two|Phrase Three|...))")
的問題是,我不知道這是可以做到的,但我願意嘗試解決方案。謝謝!
你可以做的是定義一個函數,它接受你的模式作爲一個表,然後返回匹配的表,或者如果你只需要知道,如果文本包含在頁上,然後下面會工作。
function FindAny(strContent,tblPatterns)
bReturn = false
for i,strPattern in ipairs(tblPatterns) do
if (string.find(strContent,strPattern) ~= nil) then
bReturn = true
break
end
end
return bReturn
end
if FindAny('pattern 4',{'pattern 1','pattern 2','pattern 3','pattern 4'}) then
print('Pattern Found')
end
至於http://lua-users.org/wiki/StringLibraryTutorial表示在GSUB方法。
但是,我沒有看到它允許多個參數,這是我需要做的,所以我沒有對15-20個不同的可能輸出做'if then else'...:\ – Josh 2011-06-13 19:48:35
Lua中沒有附帶內置的正則表達式,但有幾個附加該模塊。這裏有一個:http://www.inf.puc-rio.br/~roberto/lpeg/re.html
也就是說,gmatch()可以用於你描述的問題,它只是一種與正則表達式不同的語法。這裏有解釋:
我想你可以作出這樣的分析與gmatch圖案的包裝。如果圖書館允許,你也可以使用[LPEG(http://www.inf.puc-rio.br/~roberto/lpeg/lpeg.html) – jpjacobs 2011-06-13 20:24:33
的理由不包括在Lua的標準庫正則表達式是一個完整的正則表達式引擎比整個Lua語言更大。因此,你需要自己在Lua中實現它,或者使用嵌入的程序交付一些C庫(並提供給Lua)。 – 2011-06-14 16:47:18
使用簡的解決方案,它的工作完美。必須做出一些修改以適應我的需求,但是這樣做的工作。謝謝! – Josh 2011-06-15 16:43:41