Go y Golang

Expresiones regulares en Go

Hoy te mostraré cómo trabajar con expresiones regulares en el lenguaje de programación Go, también conocido como Golang.

No te mostraré cómo usar las expresiones regulares, pues las mismas son independientes del lenguaje (aunque también tienen sabores) y son un tema aparte, así que solo te mostraré cómo trabajar con expresiones regulares en Go a través de regexp.

Comprobar si cadena coincide con expresión regular

Debido a que este es un post de introducción, vamos a ver algo sencillo: cómo saber si una cadena coincide con una expresión regular en Go. Para ello primero importamos a regexp:

import "regexp"

Luego compilamos la expresión regular:

expresionRegular := regexp.MustCompile("aquí_la_expresión_regular")

Y finalmente invocamos a Match convirtiendo al cadena a un arreglo de bytes:

coincide := expresionRegular.Match([]byte("cadena_para_probar))

El método Match devolverá true o false dependiendo de si la cadena coincide o no con la expresión regular.

Por cierto, ya que estamos aquí, te recomiendo un sitio en donde yo pruebo mis expresiones regulares: https://regex101.com/

Ejemplo de expresión regular en Go

Expresiones regulares en Go – Ejemplos

Veamos un ejemplo. Vamos a comprobar (de manera simple, no lo uses en producción sin antes probarlo) si una cadena representa el subdominio de un dominio, o al dominio en sí.

Por ejemplo, para el dominio parzibyte.me, los subdominios como hola.parzibyte.me, ejemplos.parzibyte.me y todos los demás deberían pasar la prueba (agregando https:// o http:// al inicio). También parzibyte.me debería pasarlo.

Entonces la expresión regular queda así:

^https?:\/\/([\w-]+\.)?parzibyte\.me$

Recuerda que ^ marca el inicio de la cadena, y $ el final. El ? después de la s indica que la S de http es opcional (así puede ser http o https). Luego usamos \ para escapar las barras (esto también sirve para escapar los puntos).

Después, ([\w-]+\.)? indica que puede o no aparecer lo que está dentro de los paréntesis, y lo que está dentro quiere decir cualquier letra o número 1 o más veces, seguidas de un punto.

Probando expresión regular en Go con Match

Anteriormente expliqué la expresión regular. Ahora la probamos:

expresionRegular := regexp.MustCompile(`^https?:\/\/([\w-]+\.)?parzibyte\.me$`)
subdominioPrueba := "https://blog.parzibyte.me"
if expresionRegular.Match([]byte(subdominioPrueba)) {
  fmt.Println("Coincide")
} else {
  fmt.Println("NO coincide")
}

En este caso la cadena cumple la expresión regular. Como puedes ver, defino la expresión regular en la línea 1. Después hago el Match en la línea 3 e imprimo según el resultado.

Ejemplo completo

Además de probar la expresión regular en Go con una cadena, podemos hacerlo con un arreglo para probar más opciones. El código completo queda así:

package main

/*
 https://parzibyte.me/blog
*/import (
 "fmt"
 "regexp"
)

func main() {
 subdominios := [...]string{
  "https://ejemplo.parzibyte.me",
  "https://sublime-pos.parzibyte.me",
  "https://juegos.parzibyte.me",
  "https://admin.parzibyte.me",
  "https://hola.parzibyte.me",
  "http://hola.parzibyte.me",
  "http://www.parzibyte.me",
  "https://www.parzibyte.me",
  "https://hola.parzibyte.com",
  "acerca-de.parzibyte.me",
 }
 expresionRegular := regexp.MustCompile(`^https?:\/\/([\w-]+\.)?parzibyte\.me$`)
 subdominioPrueba := "https://blog.parzibyte.me"
 if expresionRegular.Match([]byte(subdominioPrueba)) {
  fmt.Println("Coincide")
 } else {
  fmt.Println("NO coincide")
 }
 for _, subdominio := range subdominios {
  coincide := expresionRegular.Match([]byte(subdominio))
  fmt.Printf("¿'%s' coincide? %t\n", subdominio, coincide)
 }
}

Recorremos el arreglo y vamos probando cada opción. Para el caso de los dos últimos elementos, no habrá coincidencia, pues uno no inicia con http ni con https, además de que otro termina en .com y no en .me

De este modo podemos trabajar con expresiones regulares en Golang. Aquí puedes leer más sobre Go en mi blog.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Servidor HTTP en Android con Flutter

El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…

3 días hace

Imprimir automáticamente todos los PDF de una carpeta

En este post te voy a enseñar a designar una carpeta para imprimir todos los…

4 días hace

Guía para imprimir en plugin versión 1 desde Android

En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…

1 semana hace

Añadir tasa de cambio en sistema de información

Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…

2 semanas hace

Comprobar validez de licencia de plugin ESC POS

Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…

2 semanas hace

Imprimir euro € en impresora térmica

Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…

3 semanas hace

Esta web usa cookies.