2017-02-28 1 views
1

패턴 일치를 regex하고 다음 코드로 시도하는 루아 lrex lib (PCRE) 사용하고 있습니다.루아 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

로컬 패턴 = [[(Chrome | Chromium)/(\ d | \.) +]]' –

답변

1

당신은 여러 값을 얻을 수 있지만 첫 번째는 w에서 캡처, 그래서 당신이 중 하나는 for 루프에 더 많은 값을 추가하거나 괄호의 또 다른 세트를 추가하여 당신이 필요로하는 전체 결과를 캡처 다른 그룹을 추가해야합니다 [[((Chrome|Chromieum)/(\d+)\.(\d+)\.?(\d*))]] .

+0

크롬 | Chromiem | Safari와 같은 패턴에 OR을 더 추가하면 문자열을 검색하여 결과를 돌려줍니다. 크롬 및 사파리. 하지만 문제는 숫자입니다./(\ d+) \. (\ d+) \.? (\ d*))와 같이 언급 한대로 버전 번호를 반환하지 않습니다. 이 문제를 극복하는 방법. 어떻게 단일 패턴을 사용하여 전체 결과를 얻을 수 있습니다. – Vish

+0

그것은 작동합니다. 감사 – Vish