2011-06-13 37 views
2

我目前正在從一個網站的腳本收集信息。我不知道是否會string.match能夠接受的正則表達式模式匹配,如以下幾點:在Lua中的string.match和正則表達式,有可能嗎?

string.match(page, "(?:(Phrase One|Phrase Two|Phrase Three|...))") 

的問題是,我不知道這是可以做到的,但我願意嘗試解決方案。謝謝!

+0

我想你可以作出這樣的分析與gmatch圖案的包裝。如果圖書館允許,你也可以使用[LPEG(http://www.inf.puc-rio.br/~roberto/lpeg/lpeg.html) – jpjacobs 2011-06-13 20:24:33

+0

的理由不包括在Lua的標準庫正則表達式是一個完整的正則表達式引擎比整個Lua語言更大。因此,你需要自己在Lua中實現它,或者使用嵌入的程序交付一些C庫(並提供給Lua)。 – 2011-06-14 16:47:18

+0

使用簡的解決方案,它的工作完美。必須做出一些修改以適應我的需求,但是這樣做的工作。謝謝! – Josh 2011-06-15 16:43:41

回答

3

你可以做的是定義一個函數,它接受你的模式作爲一個表,然後返回匹配的表,或者如果你只需要知道,如果文本包含在頁上,然後下面會工作。

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 
3

,如果你需要完全成熟的正則表達式可以使用Lrexlib

+0

似乎與我使用的程序兼容(CMUD,用於多用戶地下城)。這真是一個恥辱,因爲我肯定可以做很多事情,但顯然它只是利用了lua庫的基礎,我猜,除非我錯過了一些東西。 – Josh 2011-06-13 19:47:32

+0

啊,你沒有說Lua嵌入式。 – sylvanaar 2011-06-14 14:15:48

+0

實際上,就在今天,我總體上了解了一些關於該程序和lua的內容,那就是「require」的用法。現在我只需要弄清楚如何使它正確地需要。 :P – Josh 2011-06-14 20:49:27

2

Lua中沒有附帶內置的正則表達式,但有幾個附加該模塊。這裏有一個:http://www.inf.puc-rio.br/~roberto/lpeg/re.html

也就是說,gmatch()可以用於你描述的問題,它只是一種與正則表達式不同的語法。這裏有解釋:

http://lua-users.org/wiki/StringLibraryTutorial

http://www.wowpedia.org/Pattern_matching

+0

除非我完全失明,否則我仍然無法看到我甚至可以通過激烈的比賽來完成多個參數。也許我應該指出這些短語都是不同的,比如「結果」或「十進制近似」等。這就是我的錯。 – Josh 2011-06-14 20:01:17

+0

哦,我沒有注意到你在正則表達式中有多個參數。在這種情況下,我會做@jane建議的:將所有參數放到一個表中,然後循環遍歷該表。 – jhocking 2011-06-14 20:10:22