Expressões Regulares em Go com Exemplos: Na Prática

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 com Exemplos: Na Prática



Expressões regulares (regex) são uma ferramenta poderosa para buscar, extrair e substituir texto com base em padrões. Em Go (Golang), o pacote padrão regexp é usado para trabalhar com elas, fornecendo uma API eficiente e segura. Neste artigo, exploraremos os principais recursos do pacote com exemplos concretos que ajudarão você a aplicar o conhecimento imediatamente em projetos reais.



Fundamentos do pacote regexp em Go



O pacote regexp implementa a sintaxe de expressões regulares compatível com RE2 (exceto por referências inversas e lookahead/lookbehind). Isso o torna rápido e previsível. As principais funções são:



  • regexp.Compile(pattern) — compila um padrão em um objeto Regexp. Retorna um erro se o padrão for inválido.
  • regexp.MustCompile(pattern) — faz o mesmo, mas causa pânico em caso de erro. Conveniente para padrões estáticos.
  • MatchString(pattern, s) — verifica se a string s contém uma substring que corresponde ao padrão.


Sempre use Compile para padrões dinâmicos (por exemplo, de entrada do usuário) e MustCompile para padrões fixos no código.



package main

import ( "fmt" "regexp")

func main() { // Usamos MustCompile para um padrão estático re := regexp.MustCompile(`hello`) match := re.MatchString("hello world") fmt.Println(match) // true

// Compile para um padrão dinâmico pattern := "[0-9]+" re2, err := regexp.Compile(pattern) if err != nil { fmt.Println("Erro de compilação:", err) return } fmt.Println(re2.MatchString("abc123")) // true}


Busca e Extração de Dados



Frequentemente, não basta apenas verificar uma correspondência; é necessário extrair partes específicas da string. Para isso, usamos os métodos FindString, FindStringSubmatch e FindAllString.



Extraindo a primeira correspondência



package main

import ( "fmt" "regexp")

func main() { re := regexp.MustCompile(`\\d+`) text := "Código: 12345, preço: 678" // Primeira correspondência first := re.FindString(text) fmt.Println(first) // 12345 // Todas as correspondências all := re.FindAllString(text, -1) fmt.Println(all) // [12345 678]}


Extraindo grupos (submatches)



Grupos no padrão (indicados por parênteses) permitem extrair partes da correspondência. O método FindStringSubmatch retorna um slice onde o primeiro elemento é a correspondência completa e os seguintes são os valores dos grupos.



package main

import ( "fmt" "regexp")

func main() { // Padrão: nome de usuário @domínio re := regexp.MustCompile(`(\\w+)@(\\w+\\.\\w+)`) email := "user@example.com" match := re.FindStringSubmatch(email) if len(match) > 0 { fmt.Println("Email completo:", match[0]) // user@example.com fmt.Println("Nome de usuário:", match[1]) // user fmt.Println("Domínio:", match[2]) // example.com }}


O método FindAllStringSubmatch faz o mesmo para todas as correspondências na string.



Substituição de Texto com Expressões Regulares



O pacote regexp fornece dois métodos para substituição: ReplaceAllString (substituição simples) e ReplaceAllStringFunc (substituição usando uma função).



Substituição simples



package main

import ( "fmt" "regexp")

func main() { re := regexp.MustCompile(`\\s+`) // um ou mais espaços text := "Hello World Go" result := re.ReplaceAllString(text, " ") fmt.Println(result) // Hello World Go}


Substituição usando grupos



Na string de substituição, você pode refer

Blogs

Book Recommendations