Nyx con Ejemplos

Expresiones Regulares

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.

Código

// Expresiones regulares: regex_is_match, regex_match, regex_replace

import "std/regex"

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 + " -> " + int_to_string(validar_email(email1)))
    print("Email: " + email2 + " -> " + int_to_string(validar_email(email2)))
    print("Email: " + email3 + " -> " + int_to_string(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 = "nyx es rapido"
    let sin_tags: String = regex_replace_all(html, "<[^>]+>", "")
    print("Sin HTML: " + sin_tags)

    return 0
}

Salida

Email: alice@example.com -> 1
Email: no-es-email -> 0
Email: bob.dev@nyx-lang.org -> 1
Version encontrada: 0.12.0
Sin espacios dobles: Hola mundo Nyx
Sin HTML: nyx es rapido

Explicación

regex_is_match(str, pattern) devuelve un bool (representado como 1/0 al imprimirse vía int_to_string) que indica si el patrón coincide en algún punto de la cadena. Anclar con ^ y $ obliga a que la coincidencia sea sobre la cadena completa, algo esencial para validar entradas como en el ejemplo del email.

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 la primera coincidencia por una cadena de reemplazo, 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.

← Anterior Siguiente →

Source: examples/by-example/17-regex.nx