[Tutorial] lpeg matching |
Bolodefchoco « Sénateur » 1547333580000
| 7 | ||
lpeg (ou LuaPEG) é uma Parsing Expression Grammars para Lua. Em resumo, são mais semelhantes a Regex que Patterns (e é uma grande ajuda quando patterns não são suficientes). Um tutorial super básico sobre essa ferramenta. (Faltam muitas outras coisas, aqui é só uma apresentação básica e posso acrescentar caso vocês se interessem) P Uma string literal (sem pattern) pode ser feita com a função P. Code Lua 1 2 3 4 print( lpeg.match( lpeg.P("hi"), "hi, my name is Bolo" ) ) --> 3 R Use a função R para a primeira ocorrência de uma range (intervalo). Code Lua 1 2 3 4 print( lpeg.match( lpeg.R("69"), "9-8080-9090" ) ) --> 2 S Use a função S para a primeira ocorrência de um set. Code Lua 1 2 3 4 print( lpeg.match( lpeg.S("abc"), "ant-man" ) ) --> 2 Operador ^ O operador ^ é utilizado para definir a quantidade de ocorrências de uma pattern. Caso o número seja positivo, pode ser traduzido para "pelo menos n" Caso o número seja 0, pode ser traduzido para "n*". Caso o número seja negativo, pode ser traduzido para "no máximo n". Code Lua 1 2 3 4 5 6 7 8 9 10 print( lpeg.match( lpeg.P("o") ^ 1, "oooooooh" ) ) --> 8 Operador * O operador * é utilizado para concatenar duas patterns. Code Lua 1 2 3 4 print( lpeg.match( lpeg.P("my name is ") * lpeg.R("az") ^ 1, "my name is bolo" ) ) --> 13 Operador + O operador + é utilizado para quando duas patterns podem ser possíveis, um or. Code Lua 1 2 3 4 print( lpeg.match( ( lpeg.P("hi") + lpeg.P("hello") ), "hello" ) ) --> 6 Operador - O operador - é utilizado para quando uma pattern não deva existir para que outra seja matched. Um not y and x or nil. Caso seja usado como unário (-x), será traduzido para "" - x. Code Lua 1 2 3 4 print( lpeg.match( ( lpeg.R("az") - lpeg.R("09") ), "biscuit" ) ) --> 2 (porque não começa com números) Operador / O operador / é utilizado para retorno. Caso seja uma string (pat / x), x é retornado como captura caso pat seja válido. Caso seja uma tabela (pat / { [x]=y, ... }) é retornado como captura o valor do índice encontrado na pattern. Caso seja uma função (pat / f) é retornada o valor da captura como parâmetro da função. Code Lua 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 print( lpeg.match( ( lpeg.P("b") / "milk" ), "biscuit" ) ) --> 'milk' -- *1 Dernière modification le 1547397780000 |
Hugotitas « Citoyen » 1547334120000
| 0 | ||
Parece ser bom, vou ler daqui a pouco. Parabéns bolo! |
0 | ||
Parabéns Bolo, ótimo tópico |
0 | ||
Muito útil. Obrigado por compartilhar |
Rianmojang1 « Citoyen » 1547404560000
| 0 | ||
Muito bom seu tópico Parabens! |