2013-07-26 14 views
5

Według the docs, wszyscy operatorzy powtarzania Lua działać tylko na pojedynczych znaków, dzięki czemu można dopasowaćLua: wzór pasujący do wielu znaków za pomocą? Operator powtórzenie

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

ale nie może się równać ciągi wieloznakowych:

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

Docs powiedzieć, że jest to możliwe dzięki "wiele wzorów i niestandardowa logika", ale nie wiem, co to oznacza. Czy ktoś może zaproponować sposób dopasowania wzoru powyżej? Zasadniczo opcja 12 powinna być opcjonalnie dopasowana all-or-nothing i zwracać pozostałą część ciągu cyfr.

+1

Możesz także wypróbować LPeg lub lrexlib – hjpotter92

Odpowiedz

5

myślę „wiele wzorów i niestandardowe logika” oznacza tu użycie takiego:

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

Od or jest zwarcie, jeżeli pierwszy wzorzec pasuje, będzie to wartość expresión, w przeciwnym razie Drugi wzór będzie próbował dopasować. To jest dokładnie środek regex (12)?(%d+).

Należy również pamiętać, że istnieją mocniejsze LPeg lub inne biblioteki regex dla Lua.

Powiązane problemy