Introdução a Padrões de String
Parte da seção Logic & Flow do Journey de Lua da Coddy — lição 36 de 54.
Quando você usou string.gsub() na lição anterior, você procurou por texto exato como espaços ou palavras específicas. Mas e se você precisar encontrar "qualquer dígito" ou "qualquer letra" sem saber o caractere exato? É aqui que entram os padrões de string.
Padrões de string em Lua são uma forma de descrever que tipo de texto você está procurando, em vez do texto exato em si. Eles são mais simples que expressões regulares, mas poderosos o suficiente para a maioria das tarefas de processamento de texto.
Lua fornece códigos especiais chamados classes de caracteres que correspondem a categorias de caracteres. Aqui estão os mais comuns:
%d -- corresponde a qualquer dígito (0-9)
%a -- corresponde a qualquer letra (a-z, A-Z)
%s -- corresponde a qualquer espaço em branco (espaço, tabulação, nova linha)
%w -- corresponde a qualquer caractere alfanumérico (letras e dígitos)
%p -- corresponde a qualquer caractere de pontuaçãoVeja como você pode usar esses padrões com string.find() para localizar o primeiro dígito em uma string:
local text = "Room 42 is available"
local position = string.find(text, "%d")
print(position) -- Saída: 6Você também pode usar versões em maiúsculas dessas classes para corresponder ao oposto. Por exemplo, %D corresponde a qualquer caractere que não seja um dígito, e %A corresponde a qualquer caractere que não seja uma letra.
Desafio
FácilEscreva uma função containsDigit que recebe text e retorna se o texto contém pelo menos um dígito.
Use string.find() com a classe de caracteres %d para verificar se existe algum dígito na string.
Parâmetros:
text(string): O texto para verificar a presença de dígitos
Retorna: true se o texto contiver pelo menos um dígito, false caso contrário (boolean)
Folha de consulta
Padrões de string em Lua descrevem que tipo de texto você está procurando, em vez do texto exato em si.
Lua fornece códigos especiais chamados classes de caracteres que correspondem a categorias de caracteres:
%d -- corresponde a qualquer dígito (0-9)
%a -- corresponde a qualquer letra (a-z, A-Z)
%s -- corresponde a qualquer espaço em branco (espaço, tabulação, nova linha)
%w -- corresponde a qualquer caractere alfanumérico (letras e dígitos)
%p -- corresponde a qualquer caractere de pontuaçãoVocê pode usar versões em maiúsculas para corresponder ao oposto. Por exemplo, %D corresponde a qualquer caractere que não seja um dígito, e %A corresponde a qualquer caractere que não seja uma letra.
Usando classes de caracteres com string.find():
local text = "Room 42 is available"
local position = string.find(text, "%d")
print(position) -- Saída: 6Experimente você mesmo
function containsDigit(text)
-- Escreva o código aqui
end
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Logic & Flow
1Iteração Avançada de Tabelas
Iterando com pairs()Iterando com ipairs()pairs() vs. ipairs()Revisão - Ficha de Personagem4Introdução às Metatabelas
O que é uma Metatabela?setmetatable & getmetatableO Metamétodo __indexO Metamétodo __newindexO Metamétodo __tostringMetamétodos Aritméticos Parte 1Metamétodos Aritméticos Parte 2Recapitulação - Tabela Somente Leitura7Manipulação Avançada de Strings
string.gsub() para SubstituiçãoIntrodução a Padrões de Stringstring.find()string.match()Iteração com string.gmatch()Recapitulação - Parser de Arquivos de Log2Mais Funções da Biblioteca Table
table.concat()Construção de tabelas e unpack()table.sort()Ordenação personalizada com funçõesRecapitulação - Placar de recordes