Tutorial de Expressões Regulares em Golang

Beginner

This tutorial is from open-source community. Access the source code

Introdução

Este laboratório demonstra como usar expressões regulares (regular expressions) em Golang.

Expressões Regulares (Regular Expressions)

O laboratório exige que você complete o código para realizar várias tarefas relacionadas a expressões regulares em Golang.

  • Use o pacote regexp para realizar tarefas relacionadas a expressões regulares.
  • Use MatchString para testar se um padrão corresponde a uma string.
  • Use Compile para otimizar uma struct Regexp.
  • Use MatchString para testar uma correspondência como Compile.
  • Use FindString para encontrar a correspondência para a expressão regular.
  • Use FindStringIndex para encontrar a primeira correspondência e retornar os índices de início e fim da correspondência em vez do texto correspondente.
  • Use FindStringSubmatch para retornar informações para p([a-z]+)ch e ([a-z]+).
  • Use FindStringSubmatchIndex para retornar informações sobre os índices das correspondências e subcorrespondências.
  • Use FindAllString para encontrar todas as correspondências para uma expressão regular.
  • Use FindAllStringSubmatchIndex para aplicar a todas as correspondências na entrada, não apenas a primeira.
  • Use Match para testar uma correspondência com argumentos []byte e remover String do nome da função.
  • Use MustCompile para criar variáveis globais com expressões regulares.
  • Use ReplaceAllString para substituir subconjuntos de strings por outros valores.
  • Use ReplaceAllFunc para transformar o texto correspondente com uma função fornecida.
## Para uma referência completa sobre expressões regulares em Go, verifique
## a documentação do pacote [`regexp`](https://pkg.go.dev/regexp).

Aqui está o código completo:

// Go oferece suporte integrado para [expressões regulares](https://en.wikipedia.org/wiki/Regular_expression).
// Aqui estão alguns exemplos de tarefas comuns relacionadas a regexp
// em Go.

package main

import (
    "bytes"
    "fmt"
    "regexp"
)

func main() {

    // Isso testa se um padrão corresponde a uma string.
    match, _ := regexp.MatchString("p([a-z]+)ch", "peach")
    fmt.Println(match)

    // Acima, usamos um padrão de string diretamente, mas para
    // outras tarefas de regexp, você precisará `Compile` uma
    // struct `Regexp` otimizada.
    r, _ := regexp.Compile("p([a-z]+)ch")

    // Muitos métodos estão disponíveis nessas structs. Aqui está
    // um teste de correspondência como vimos anteriormente.
    fmt.Println(r.MatchString("peach"))

    // Isso encontra a correspondência para a expressão regular.
    fmt.Println(r.FindString("peach punch"))

    // Isso também encontra a primeira correspondência, mas retorna o
    // índices de início e fim para a correspondência em vez do
    // texto correspondente.
    fmt.Println("idx:", r.FindStringIndex("peach punch"))

    // As variantes `Submatch` incluem informações sobre
    // tanto as correspondências de padrão completo quanto as subcorrespondências
    // dentro dessas correspondências. Por exemplo, isso retornará
    // informações para `p([a-z]+)ch` e `([a-z]+)`.
    fmt.Println(r.FindStringSubmatch("peach punch"))

    // Da mesma forma, isso retornará informações sobre o
    // índices de correspondências e subcorrespondências.
    fmt.Println(r.FindStringSubmatchIndex("peach punch"))

    // As variantes `All` dessas funções se aplicam a todas as
    // correspondências na entrada, não apenas a primeira. Para
    // por exemplo, encontrar todas as correspondências para uma expressão regular.
    fmt.Println(r.FindAllString("peach punch pinch", -1))

    // Essas variantes `All` estão disponíveis para as outras
    // funções que vimos acima também.
    fmt.Println("all:", r.FindAllStringSubmatchIndex(
        "peach punch pinch", -1))

    // Fornecer um inteiro não negativo como o segundo
    // argumento para essas funções limitará o número
    // de correspondências.
    fmt.Println(r.FindAllString("peach punch pinch", 2))

    // Nossos exemplos acima tinham argumentos de string e usavam
    // nomes como `MatchString`. Também podemos fornecer
    // argumentos `[]byte` e remover `String` do
    // nome da função.
    fmt.Println(r.Match([]byte("peach")))

    // Ao criar variáveis globais com expressões
    // regulares, você pode usar a variação `MustCompile`
    // de `Compile`. `MustCompile` entra em pânico em vez de
    // retornar um erro, o que o torna mais seguro para usar para
    // variáveis globais.
    r = regexp.MustCompile("p([a-z]+)ch")
    fmt.Println("regexp:", r)

    // O pacote `regexp` também pode ser usado para substituir
    // subconjuntos de strings por outros valores.
    fmt.Println(r.ReplaceAllString("a peach", "<fruit>"))

    // A variante `Func` permite que você transforme o texto correspondente
    // com uma função fornecida.
    in := []byte("a peach")
    out := r.ReplaceAllFunc(in, bytes.ToUpper)
    fmt.Println(string(out))
}

Resumo

Este laboratório demonstra como usar expressões regulares (regular expressions) em Golang para realizar várias tarefas, como testar se um padrão corresponde a uma string, encontrar a correspondência para a expressão regular e substituir subconjuntos de strings por outros valores.