Pular para o conteúdo

pregMatch

Compartilhada Utilidades

Junta todas as ocorrências de uma expressão regular.

table pregMatch ( string texto, string padrao [, int/string flags = 0, int maxResultados = 100000 ] )
NomeTipoPadrãoDescrição
textostring—Texto onde procurar. Um número vira texto.
padraostring—Expressão regular.
flagsint ou string0Opções de busca — veja abaixo.
maxResultadosint100000Para depois de tantas ocorrências.

O argumento flags é um número — a soma dos bits abaixo — ou uma string com as letras:

LetraBitEfeito
i1Não diferencia maiúsculas de minúsculas.
m2Multilinha: ^ e $ também casam nas quebras de linha.
d4Dot-all: . também casa com uma quebra de linha.
e8Estendido: espaços e comentários # dentro do padrão são ignorados.
u16UTF-8: padrão e texto são lidos como UTF-8, e \w, \d e afins seguem o Unicode.

Uma string com qualquer outra letra registra Bad usage @ '<função>' [Flags all wrong] e a chamada devolve false; um número negativo também. Qualquer outro tipo — nil, um booleano — significa sem flags.

maxResultados só é lido depois de flags: pregMatch(t, p, 5) toma o 5 como flags, e pregMatch(t, p, nil, 5) ignora o 5. Passe as flags explicitamente — 0 para nenhuma — quando quiser um limite.

Uma tabela com uma string por ocorrência, em ordem. Quando o padrão tem grupos de captura, cada entrada é o que o primeiro grupo capturou (uma string vazia se esse grupo não participou da ocorrência); sem grupos, é a ocorrência inteira. Nada casando — ou um padrão que não compila — dá uma tabela vazia. Um argumento inválido registra um aviso e devolve false.

Cada busca recomeça logo depois da ocorrência anterior, no resto do texto como se fosse um texto novo, então ^ casa de novo em cada ponto de recomeço. Uma ocorrência vazia avança um caractere.

Os padrões usam a sintaxe do PCRE2. Cada busca tem um teto fixo de trabalho de backtracking, então um padrão patológico para de casar em vez de travar o script.

local numeros = pregMatch("x=10, y=-3, z=42", "(-?\\d+)")
-- numeros = { "10", "-3", "42" }
local primeirasDuas = pregMatch("a1 b2 c3", "[a-z]\\d", 0, 2)
-- primeirasDuas = { "a1", "b2" }
  • getUserdataType — Diz que tipo de handle um userdata é.
  • pregFind — Diz se uma expressão regular casa com uma string.
  • pregReplace — Substitui todas as ocorrências de uma expressão regular.