2017-02-28 7 views
1

Ich benutze Lua Lrex Lib (PCRE), um Muster zu regex und mit dem folgenden Code versuchen.Lua lrex lib pcre Muster passend

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 

Es sollte in der Ausgabe Chrome 39.0.2171 aber es ist nur die Anzeige Chrome angezeigt werden soll.

Kann mir jemand helfen, diesen Fehler zu korrigieren. Jede Hilfe ist zu schätzen.

+0

'lokales Muster = [[(Chrome | Chromium)/(\ d | \.) +]]' –

Antwort

1

Sie erhalten mehrere Werte, sondern nur die erste ist in w gefangen, so müssen Sie entweder mehr Werte an die for Schleife hinzuzufügen oder eine andere Gruppierung hinzufügen, die die gesamten Ergebnisse, die Sie durch das Hinzufügen eines weiteren Satzes von Klammern müssen erfasst: [[((Chrome|Chromieum)/(\d+)\.(\d+)\.?(\d*))]] .

+0

Wenn ich mehr OR in ein Muster wie Chrome | Chromiem | Safari einfüge, suche ich die Zeichenfolge und gebe das Ergebnis mit zurück Chrome und Safari. Aber das Problem ist mit Ziffer. Es gibt mir keine Versionsnummer zurück, wie ich /(\d+)\.(\d+)\.?(\d*) erwähnt habe). Wie man mit diesem Problem fertig wird. Wie kann ich das ganze Ergebnis mit einem einzigen Muster erhalten? – Vish

+0

Es funktioniert. Vielen Dank – Vish