string.find()
Parte da seção Logic & Flow do Journey de Lua da Coddy — lição 37 de 54.
Agora que você entende as classes de caracteres, você 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 forma com padrões como faz com strings literais—ela retorna a posição onde o padrão coincide 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 pelo oposto usando classes de caracteres em 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 ele 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 início 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")
endEste padrão verifica se a string começa com uma letra, tornando-o útil para validação de entrada onde certos formatos são necessários.
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
Retorna: true se a string começar com uma letra, false caso contrário (booleano)
Folha de consulta
Use string.find() com classes de caracteres para procurar padrões em strings. Ele retorna a posição onde o padrão coincide pela primeira vez:
local text = "User123"
local position = string.find(text, "%d")
print(position) -- Saída: 5Classes de caracteres em maiúsculas correspondem ao oposto (caracteres que não coincidem):
local code = "ABC123"
local position = string.find(code, "%D")
print(position) -- Saída: 1Use a âncora ^ no início de um padrão para coincidir apenas com o 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")
endExperimente 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 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