El módulo std/regex envuelve expresiones regulares extendidas POSIX. Tres funciones cubren las operaciones más comunes: probar si un patrón coincide, extraer la primera coincidencia y reemplazar coincidencias en una cadena. Los patrones siguen la sintaxis estándar POSIX ERE.
// Expresiones regulares: regex_is_match, regex_match, regex_replace import "std/regex" // bool -> texto: int_to_string() espera un int y un bool no se convierte solo, // así que la conversión se escribe explícita. fn si_no(b: bool) -> String { if b { return "si" } return "no" } fn validar_email(email: String) -> bool { // Patrón POSIX básico para email return regex_is_match(email, "^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9.-]+$") } fn main() -> int { // Validar emails let email1: String = "alice@example.com" let email2: String = "no-es-email" let email3: String = "bob.dev@nyx-lang.org" print("Email: " + email1 + " -> " + si_no(validar_email(email1))) print("Email: " + email2 + " -> " + si_no(validar_email(email2))) print("Email: " + email3 + " -> " + si_no(validar_email(email3))) // regex_match: retorna la primera coincidencia o "" let texto: String = "Nyx version 0.12.0 released" let resultado: String = regex_match(texto, "[0-9]+\\.[0-9]+\\.[0-9]+") print("Version encontrada: " + resultado) // regex_replace: reemplaza primera coincidencia let frase: String = "Hola mundo Nyx" let limpio: String = regex_replace(frase, " +", " ") print("Sin espacios dobles: " + limpio) // regex_replace_all: reemplaza todas las coincidencias let html: String = "<b>nyx</b> es <i>rapido</i>" let sin_tags: String = regex_replace_all(html, "<[^>]+>", "") print("Sin HTML: " + sin_tags) return 0 }
Email: alice@example.com -> si Email: no-es-email -> no Email: bob.dev@nyx-lang.org -> si Version encontrada: 0.12.0 Sin espacios dobles: Hola mundo Nyx Sin HTML: nyx es rapido
Cómo funciona
regex_is_match(str, pattern) devuelve un bool que indica si el patrón coincide en algún punto de la cadena; un bool no entra en int_to_string, así que la receta lo imprime con el helper si_no. Anclar con ^ y $ obliga a que la coincidencia sea sobre la cadena completa, algo esencial para validar entradas como en el ejemplo del email. Ojo con las clases de caracteres: un - literal entre corchetes va primero o último, si no POSIX lo lee como rango y la clase entera deja de coincidir.
regex_match(str, pattern) devuelve la primera subcadena que coincide con el patrón, o una cadena vacía si no hay coincidencia. Es útil para tareas de extracción, como parsear números de versión, fechas o identificadores dentro de un texto más grande.
regex_replace sustituye SOLO la primera coincidencia — por eso la salida conserva el triple espacio antes de Nyx — mientras que regex_replace_all reemplaza todas las coincidencias no solapadas. El ejemplo que elimina etiquetas HTML usa el patrón <[^>]+> para hacer coincidir cualquier etiqueta HTML completa y la reemplaza por una cadena vacía, dejando solo el contenido de texto.