Expressões regulares em Go com exemplos: guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Expressões Regulares em Go: uma ferramenta poderosa para trabalhar com texto

Expressões regulares (regex) são uma ferramenta indispensável para pesquisar, extrair e substituir texto com base em padrões. Na linguagem Go (Golang), o trabalho com expressões regulares é implementado através do pacote padrão regexp. Ele fornece uma maneira rápida e segura de trabalhar com padrões, usando uma sintaxe próxima ao Perl e RE2. Neste artigo, vamos analisar as principais funções do pacote com exemplos práticos.



1. Fundamentos do trabalho com o pacote regexp

O pacote regexp segue o princípio "compile uma vez, use muitas vezes". Isso melhora o desempenho ao aplicar repetidamente o mesmo padrão. Funções principais:

  • regexp.Compile(expr) — compila a expressão regular. Retorna *Regexp e um erro.
  • regexp.MustCompile(expr) — faz o mesmo, mas causa pânico em caso de erro. Conveniente para inicializar variáveis globais.
  • regexp.MatchString(expr, s) — verifica se a string s contém pelo menos uma correspondência com o padrão.


package main

import ( "fmt" "regexp")

func main() { // Verificação simples: a string contém dígitos? matched, _ := regexp.MatchString(`\\d+`, "Pedido nº12345") fmt.Println(matched) // true

// Compilamos o padrão para uso repetido re := regexp.MustCompile(`[a-z]+`) fmt.Println(re.MatchString("hello")) // true fmt.Println(re.MatchString("HELLO")) // false}


Observe: por padrão, MatchString procura correspondência parcial (como strings.Contains). Para correspondência total da string com o padrão, use as âncoras ^ e $.



2. Pesquisa e extração de dados

Para pesquisar todas as correspondências ou a primeira ocorrência, use os métodos FindString, FindAllString, FindStringSubmatch e seus análogos para slices de bytes.



2.1. Pesquisar a primeira correspondência

re := regexp.MustCompile(`\\b\\w+@\\w+\\.\\w+\\b`)email := re.FindString("Contate-nos: support@example.com ou info@test.org")fmt.Println(email) // support@example.com


2.2. Pesquisar todas as correspondências

re := regexp.MustCompile(`\\d{4}`)numbers := re.FindAllString("Códigos: 1234, 5678, 9012", -1)fmt.Println(numbers) // [1234 5678 9012]

O segundo argumento de FindAllString é o número máximo de correspondências. -1 significa "todas".



2.3. Grupos de captura (submatch)

Grupos de captura permitem extrair partes da correspondência. Eles são definidos por parênteses ().

re := regexp.MustCompile(`(\\w+)@(\\w+\\.\\w+)`)match := re.FindStringSubmatch("user@example.com")fmt.Println(match) // [user@example.com user example.com]// match[0] — correspondência completa// match[1] — primeiro grupo (user)// match[2] — segundo grupo (example.com)


3. Substituição de texto com expressões regulares

O pacote regexp fornece dois métodos principais para substituição:

  • ReplaceAllString(src, repl) — substitui todas as correspondências pela string repl.
  • ReplaceAllStringFunc(src, replFunc) — substitui cada correspondência usando uma função de retorno de chamada.


3.1. Substituição simples

re := regexp.MustCompile(`\\s+`)result := re.ReplaceAllString("Muitos   espaços   aqui", " ")fmt.Println(result) // "Muitos espaços aqui"


3.2. Substituição usando grupos de captura

Na string de substituição, você pode referenciar grupos através de $1, $2, etc.

re := regexp.MustCompile(`(\\w+)\\s+(\\w+)`)result := re.ReplaceAllString("João Silva", "$2, $1")

Blogs

Book Recommendations