2013-07-26 6 views
5

Nach the docs, alle Wiederholung Lua Operatoren nur auf einzelne Zeichen arbeiten, so können SieLua: Pattern-Matching Multi-Zeichen mit der? Wiederholungsoperator

string.match('123', '1?(%d+)') -- returns 23 

übereinstimmen, kann aber mit mehreren Zeichenfolgen nicht übereinstimmen:

string.match('123', '(12)?(%d+)') -- want this to return 3 

Die docs sagen, es ist möglich durch "mehrere Muster und benutzerdefinierte Logik", aber ich weiß nicht, was das bedeutet. Kann jemand eine Möglichkeit anbieten, die oben genannten Muster zu kombinieren? Grundsätzlich sollte 12 optional all-or-nothing sein und den Rest der Ziffernfolge zurückgeben.

+1

Sie können auch LPeg oder Lrexlib versuchen – hjpotter92

Antwort

5

Ich denke, „mehrere Muster und benutzerdefinierte Logik“ bedeutet hier Nutzung wie folgt aus:

string.match('123', '12(%d+)') or string.match('123', '(%d+)') 

Da or ist Kurzschluss, wenn das erste Muster übereinstimmt, wird es der Wert des expresion sein, da sonst die zweites Muster wird versuchen, übereinzustimmen. Dies ist genau die Regex (12)?(%d+) bedeutet.

Beachten Sie auch, dass es leistungsfähigere LPeg oder andere Regex-Bibliotheken für Lua gibt.