Menu
Coddy logo textTech

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: 100

O 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: Alice

Aqui, 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.

challenge icon

Desafio

Fácil

Escreva 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: 100

O modificador + corresponde a um ou mais da classe de caracteres precedente:

%d+  -- um ou mais dígitos
%a+  -- uma ou mais letras

Use 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: Alice

Mú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
quiz iconTeste seus conhecimentos

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