2017-02-28 76 views
1

我正在使用Lua lrex lib(PCRE)來進行正則表達式模式匹配,並嘗試使用以下代碼。Lua lrex lib pcre模式匹配

local string="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36" 
local pattern=[[(Chrome|Chromieum)/(\d+)\.(\d+)\.?(\d*)]] 

for w in rex.gmatch(string, pattern) do 
    ngx.say(w) 
end 

應該在輸出顯示鉻39.0.2171 但其僅顯示瀏覽器。

任何人都可以幫助我糾正這個錯誤。任何幫助表示感謝。

+0

'local pattern = [[(Chrome | Chromium)/(\ d | \。)+]]' –

回答

1

你得到多個值,但只有第一個是w拍攝,所以你要麼需要更多的值添加到for循環或添加其他分組,通過添加另一組括號捕捉你所需要的全部結果:[[((Chrome|Chromieum)/(\d+)\.(\d+)\.?(\d*))]]

+0

如果我在Chrome | Chromiem | Safari等模式中添加更多OR,則會搜索字符串並返回結果Chrome和Safari。 但問題是數字。它不返回我版本號,正如我所提到的/(\d+)\.(\d+)\.?((dd)))。如何克服這個問題。我如何使用單一模式得到整個結果。 – Vish

+0

它有效。謝謝 – Vish