string.find()
Parte da seção Lógica e fluxo do Journey de Lua da Coddy. Lição 37 de 54.
Agora que você entende classes de caracteres, pode usá-las com string.find() para buscar padrões em vez de texto exato. Isso abre possibilidades poderosas para validação e análise de texto.
A função string.find() funciona da mesma maneira com padrões e com strings literais. Ela retorna a posição em que o padrão corresponde pela primeira vez:
local text = "User123"
local position = string.find(text, "%d")
print(position) -- Saída: 5Isso encontra o primeiro dígito na string, que está na posição 5. Você também pode pesquisar o oposto usando classes de caracteres maiúsculas:
local code = "ABC123"
local position = string.find(code, "%D")
print(position) -- Saída: 1Aqui, %D corresponde a qualquer caractere que não seja um dígito, então encontra a primeira letra na posição 1.
Uma tarefa comum de validação é verificar se uma string começa com um padrão específico. Você pode usar a âncora ^ no início de um padrão para corresponder apenas ao começo da string:
local username = "player42"
local startsWithLetter = string.find(username, "^%a")
if startsWithLetter then
print("Valid username")
else
print("Username must start with a letter")
endEsse padrão verifica se a string começa com uma letra, sendo útil para validar entradas quando determinados formatos são obrigatórios.
Para encontrar um caractere especial em si, como um ponto, escape-o com % ou desative os padrões com uma busca simples (1 para começar no primeiro caractere, true para busca simples):
print(string.find("v1.5", "%.")) -- Saída: 3 3
print(string.find("v1.5", ".", 1, true)) -- Saída: 3 3
print(string.find("v1.5", ".")) -- Saída: 1 1 (. corresponde a qualquer caractere)Desafio
FácilEscreva uma função startsWithLetter que recebe text e retorna se a string começa com uma letra.
Use string.find() com a âncora ^ e a classe de caracteres %a para verificar se a string começa com uma letra.
Parâmetros:
text(string): A string a ser validada
Retorno: true se a string começar com uma letra, false caso contrário (booleano)
Experimente você mesmo
function startsWithLetter(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 Lógica e fluxo
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 e getmetatableO Metamétodo __indexO Metamétodo __newindexO Metamétodo __tostringMetamétodos Aritméticos — Parte 1Metamétodos Aritméticos — Parte 2Recapitulação — Tabela Somente para Leitura7Manipulação Avançada de Strings
string.gsub() para SubstituiçãoIntrodução aos Padrões de Stringsstring.find()string.match()Iterando com string.gmatch()Recapitulação - Analisador de Arquivos de Log2Mais funções da biblioteca table
table.concat()Construção de tabelas e unpack()table.sort()Ordenação personalizada com funçõesRevisão - Placar de pontuações máximasPratique por conta própria: Compilador de Lua online