string.match()
Parte da seção Logic & Flow do Journey de Lua da Coddy — lição 38 de 54.
Enquanto o string.find() informa onde um padrão aparece em uma string, às vezes você precisa extrair o texto real que correspondeu. É aqui que o string.match() entra em cena, e ele se torna ainda mais poderoso quando combinado com capturas.
Capturas permitem que você marque partes específicas de um padrão que deseja extrair. Você cria uma captura envolvendo parte do seu padrão em parênteses (). Quando string.match() encontra uma correspondência, ele retorna o texto capturado em vez de apenas a posição.
Aqui está um exemplo simples de extração de um número de uma string:
local text = "Player score: 100"
local number = string.match(text, "%d+")
print(number) -- Saída: 100O padrão %d+ significa "um ou mais dígitos." O + é um modificador que corresponde a um ou mais da classe de caracteres precedente, permitindo que você capture números de vários dígitos.
Você pode usar capturas para extrair partes específicas de um padrão mais complexo:
local message = "User: Alice sent a message"
local username = string.match(message, "User: (%a+)")
print(username) -- Saída: AliceAqui, os parênteses em volta de %a+ dizem ao Lua para capturar a sequência de letras que vem após "User: ". O restante do padrão ajuda a localizar a posição correta, mas apenas a parte capturada é retornada.
Se o seu padrão tiver múltiplas capturas, string.match() retorna todas elas como valores separados, que você pode atribuir a múltiplas variáveis de uma só vez.
Desafio
FácilEscreva uma função extractPrice que recebe text e retorna o valor do preço encontrado na string.
Use string.match() com um padrão de captura para extrair o preço numérico que aparece após o cifrão. O padrão deve capturar um ou mais dígitos usando %d+.
Parâmetros:
text(string): Uma string contendo um preço no formato "Price: $XX"
Retorna: O preço numérico como uma string (string)
Folha de consulta
Use string.match() para extrair texto que corresponda a um padrão:
local text = "Player score: 100"
local number = string.match(text, "%d+")
print(number) -- Saída: 100O modificador + corresponde a um ou mais da classe de caracteres precedente:
%d+ -- um ou mais dígitos
%a+ -- uma ou mais letrasUse parênteses () para criar capturas que extraem partes específicas de um padrão:
local message = "User: Alice sent a message"
local username = string.match(message, "User: (%a+)")
print(username) -- Saída: AliceMúltiplas capturas retornam valores separados:
local var1, var2 = string.match(text, "(pattern1)(pattern2)")Experimente você mesmo
function extractPrice(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