0Pricing
Swift Academy · Lección

DSL RegexBuilder

Componga expresiones regulares con un constructor legible.

DSL RegexBuilder es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.

DSL de RegexBuilder

Los literales de regex complejos pueden resultar difíciles de leer. El módulo RegexBuilder permite crear patrones a partir de código Swift mediante un DSL de tipo result-builder, con componentes y tipos con nombre.

Importar RegexBuilder

Importe el módulo y, a continuación, construya un Regex con el generador Regex { ... }. Dentro de él, cada línea es una parte secuencial del patrón.

import RegexBuilder

let re = Regex {
    "ID-"
    OneOrMore(.digit)
}
print("ID-42".contains(re))

OneOrMore

OneOrMore(...) coincide con una o más repeticiones del componente indicado, equivalente a +. .digit es una clase de caracteres integrada.

import RegexBuilder

let number = Regex {
    OneOrMore(.digit)
}
if let m = "abc789".firstMatch(of: number) {
    print(m.0)
}

ZeroOrMore y Optionally

ZeroOrMore equivale a * y Optionally a ?. Permiten repetir u omitir partes del patrón.

import RegexBuilder

let re = Regex {
    "color"
    Optionally("u")
    "r"
}
print("colour".wholeMatch(of: re) != nil)
print("color".wholeMatch(of: re) != nil)

Capture

Capture { ... } crea un grupo de captura. La subcadena coincidente aparece en la tupla de salida, igual que ocurre con los paréntesis de un literal.

import RegexBuilder

let re = Regex {
    "v"
    Capture { OneOrMore(.digit) }
}
if let m = "v123".wholeMatch(of: re) {
    print("Version: \(m.1)")
}

Transformar capturas

Un Capture puede incluir un closure de transformación que convierte el texto coincidente en un valor tipado, de modo que la salida ya sea un Int u otro tipo.

import RegexBuilder

let re = Regex {
    Capture {
        OneOrMore(.digit)
    } transform: { Int($0)! }
}
if let m = "42".wholeMatch(of: re) {
    let n: Int = m.1
    print(n + 1)
}

CharacterClass

Utilice CharacterClass o elementos integrados como .word, .whitespace y rangos como ("a"..."z") para definir qué caracteres se permiten.

import RegexBuilder

let re = Regex {
    One(.word)
    ZeroOrMore(("a"..."z"))
}
print("hello".contains(re))

Anclas en el generador

Añada Anchor.startOfLine y Anchor.endOfLine para realizar aserciones posicionales dentro del generador.

import RegexBuilder

let re = Regex {
    Anchor.startOfLine
    OneOrMore(.digit)
    Anchor.endOfLine
}
print("100".wholeMatch(of: re) != nil)

Componentes reutilizables

Puede guardar subpatrones en variables y combinarlos, lo que hace que las regex grandes sean modulares y legibles.

import RegexBuilder

let field = Reference(Substring.self)
let re = Regex {
    Capture(as: field) { OneOrMore(.word) }
}
if let m = "name".firstMatch(of: re) {
    print(m[field])
}

Varias capturas

Cada Capture añade un elemento de salida en orden, por lo que un analizador de fechas expone por separado el año, el mes y el día.

import RegexBuilder

let date = Regex {
    Capture { Repeat(.digit, count: 4) }
    "-"
    Capture { Repeat(.digit, count: 2) }
}
if let m = "2024-05".wholeMatch(of: date) {
    print("\(m.1) / \(m.2)")
}

Elegir entre DSL y literal

Utilice literales para patrones cortos y el DSL para patrones largos que se beneficien de nombres, tipos y transformaciones. Son intercambiables e incluso pueden anidarse.

import RegexBuilder

let re = Regex {
    "#"
    Capture { /[0-9a-fA-F]{6}/ }
}
if let m = "#FF8800".wholeMatch(of: re) {
    print("Hex: \(m.1)")
}

Comprobación rápida

¿Qué componente de RegexBuilder coincide con una o más repeticiones de algo?

Resumen

El DSL de RegexBuilder crea regex a partir de código Swift con Regex { }, utilizando OneOrMore, Optionally, Capture con transformaciones, clases de caracteres y anclas. Hace que los patrones complejos sean legibles y seguros en cuanto a tipos. A continuación, modificará texto mediante reemplazos y divisiones.

Preguntas frecuentes

¿La lección «DSL RegexBuilder» es gratis?

Sí — el texto completo de «DSL RegexBuilder» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.

¿Qué aprenderé en «DSL RegexBuilder»?

Componga expresiones regulares con un constructor legible. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Swift Academy?

No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «DSL RegexBuilder»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Swift Academy?

Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Literales regex y coincidencias
  2. Grupos de captura
  3. DSL RegexBuilder
  4. Reemplazar y dividir texto
← Volver a Swift Academy