Expresiones regulares en Go

Las expresiones regulares (Regular Expression, abreviadas como regex o regexp) son una herramienta poderosa para hacer coincidir cadenas.

Al definir un patrón (pattern), las expresiones regulares pueden buscar, reemplazar o extraer rápidamente cadenas que coincidan con ese patrón. Para más detalles, consulteTutorial de expresiones regulares。

En el lenguaje Go, las expresiones regulares se implementan mediante elregexppaquete.


En el lenguaje GoregexpPaquete

La biblioteca estándar de Go proporciona elregexppaquete para manejar expresiones regulares. A continuación se presentan lasregexpfunciones y métodos de uso común del paquete:

  1. CompileyMustCompile
    Se utiliza para compilar expresiones regulares.CompileDevuelve un*Regexpobjeto y un error, mientras queMustCompileentrará en pánico (panic) directamente cuando la compilación falle.

  2. MatchString
    Comprueba si una cadena coincide con la expresión regular.

  3. FindStringyFindAllString
    Se utiliza para buscar cadenas coincidentes.FindStringDevuelve la primera coincidencia,FindAllStringdevuelve todas las coincidencias.

  4. ReplaceAllString
    Se utiliza para reemplazar cadenas coincidentes.

  5. Split
    Divide la cadena según la expresión regular.


Sintaxis básica de las expresiones regulares

A continuación se presentan algunas sintaxis comunes de expresiones regulares:

  • .: Coincide con cualquier carácter individual (excepto saltos de línea).
  • *: Coincide con el carácter anterior 0 o más veces.
  • +: Coincide con el carácter anterior 1 o más veces.
  • ?: Coincide con el carácter anterior 0 o 1 veces.
  • \d: Coincide con un carácter numérico (equivalente a[0-9])。
  • \w: Coincide con letras, dígitos o guiones bajos (equivalente a[a-zA-Z0-9_])。
  • \s: Coincide con caracteres de espacio en blanco (incluidos espacios, tabulaciones, saltos de línea, etc.).
  • []: Coincide con cualquier carácter dentro de los corchetes (por ejemplo,[abc]coincide cona、boc)。
  • ^: Coincide con el inicio de la cadena.
  • $: Coincide con el final de la cadena.

Código de ejemplo

A continuación se muestran algunos ejemplos del uso de expresiones regulares en Go:

Ejemplo 1: Verificar si una cadena coincide con la expresión regular

Ejemplo

package main

import (
    "fmt"
    "regexp"
)

func main() {
    pattern := `^[a-zA-Z0-9]+$`
    regex := regexp.MustCompile(pattern)

    str := "Hello123"
    if regex.MatchString(str) {
        fmt.Println("La cadena coincide con la expresión regular")
    } else {
        fmt.Println("La cadena no coincide con la expresión regular")
    }
}

Ejemplo 2: Buscar cadenas coincidentes

Ejemplo

package main

import (
    "fmt"
    "regexp"
)

func main() {
    pattern := `\d+`
    regex := regexp.MustCompile(pattern)

    str := "Tengo 3 manzanas y 5 plátanos"
    matches := regex.FindAllString(str, -1)
    fmt.Println("Números encontrados:", matches)
}

Ejemplo 3: Reemplazar cadenas coincidentes

Ejemplo

package main

import (
    "fmt"
    "regexp"
)

func main() {
    pattern := `\s+`
    regex := regexp.MustCompile(pattern)

    str := "Hello    World"
    result := regex.ReplaceAllString(str, " ")
    fmt.Println("Cadena reemplazada:", result)
}

Ejemplo 4: Dividir cadenas

Ejemplo

package main

import (
    "fmt"
    "regexp"
)

func main() {
    pattern := `,`
    regex := regexp.MustCompile(pattern)

    str := "apple,banana,orange"
    parts := regex.Split(str, -1)
    fmt.Println("Cadena dividida:", parts)
}

Precauciones

  1. Problemas de rendimiento
    Las operaciones de coincidencia y reemplazo de expresiones regulares pueden consumir muchos recursos, especialmente al procesar grandes cantidades de datos. Se recomienda usarlas con precaución en escenarios sensibles al rendimiento.

  2. Caracteres de escape
    En el lenguaje Go, la barra invertida en las expresiones regulares\debe escribirse como\\, porque la barra invertida también es un carácter de escape en las cadenas.

  3. Manejo de errores
    Al usarCompilela función, asegúrese de verificar el error devuelto para evitar que el programa se bloquee.

Otras extensiones