Gruki Logo

Gruki - Documentación de Programación

Kotlin

Expresiones Regulares en Kotlin: Domina la Búsqueda de Patrones

Aprende expresiones regulares en Kotlin de forma sencilla. Valida formatos, busca patrones y manipula texto como un experto, ¡incluso si eres principiante!

¿Alguna vez has intentado buscar una aguja en un pajar? Las expresiones regulares son como un imán gigante que encuentra exactamente lo que buscas en un texto, ¡sin importar lo grande que sea!

Imagina que quieres encontrar todos los números de teléfono en un documento. En lugar de leer línea por línea, una expresión regular puede identificarlos al instante basándose en su patrón común (ej: XXX-XXX-XXXX). ¡Es como magia, pero con reglas!

¿Qué son las Expresiones Regulares?

Son patrones especiales que describen conjuntos de cadenas de texto. Piensa en ellas como un lenguaje secreto que le dice a tu computadora qué buscar. En lugar de buscar una palabra exacta, buscas un *tipo* de palabra.

Por ejemplo, si quieres encontrar todas las palabras que empiezan con la letra 'a', en lugar de buscar 'arbol', 'auto', 'avion' por separado, usas una expresión regular que significa 'cualquier palabra que empiece con a'.

Puntos importantes:

  • Las expresiones regulares se utilizan en muchos lugares: para validar correos electrónicos, buscar texto en documentos, verificar contraseñas, ¡y mucho más!
  • Son una herramienta muy poderosa para cualquier programador, ya que ahorran mucho tiempo y esfuerzo.

Usando Expresiones Regulares en Kotlin

Kotlin tiene funciones especiales para trabajar con expresiones regulares. Principalmente, usaremos la clase `Regex`.

Para crear una expresión regular, simplemente escribes el patrón entre comillas y lo conviertes en un objeto `Regex`. Por ejemplo, `val patron = Regex("abc")` buscará la secuencia 'abc'.

Puntos importantes:

  • Algunos caracteres tienen un significado especial en las expresiones regulares (como '.', '*', '+', '?'). Si quieres buscar esos caracteres literalmente, debes 'escaparlos' con una barra invertida (`\`). Por ejemplo, para buscar un punto '.', debes escribir `\.`. Piénsalo como ponerle un disfraz a ese caracter, para que no se comporte de manera especial.
  • Hay muchas 'clases' de caracteres predefinidas que puedes usar en tus expresiones regulares. Por ejemplo, `\d` representa cualquier dígito (0-9), `\w` representa cualquier caracter alfanumérico (letras, números, y guión bajo), y `\s` representa cualquier espacio en blanco (espacio, tabulador, salto de línea).

Ejemplos Prácticos

Veamos algunos ejemplos de cómo usar expresiones regulares en Kotlin.

Imagínate que tienes una lista de nombres y quieres encontrar todos los nombres que terminan en 'ez'. Puedes usar la expresión regular 'ez$' (el '$' significa 'al final de la cadena').

Validando un Email

Una de las aplicaciones más comunes de las expresiones regulares es la validación de correos electrónicos. Aunque una expresión regular *perfecta* es muy complicada, podemos crear una que funcione bastante bien.

Un email típicamente tiene una parte antes del '@', luego el '@', luego un dominio (como 'gmail.com'). Una expresión regular simple podría ser: `[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}`. ¡Vamos a desglosarla!

Puntos importantes:

  • `[a-zA-Z0-9._%+-]+` : Esto significa 'uno o más caracteres que pueden ser letras (mayúsculas o minúsculas), números, punto, guión bajo, porcentaje, más, o guión'.
  • `@` : Simplemente, el símbolo '@'.
  • `[a-zA-Z0-9.-]+` : Uno o más caracteres que pueden ser letras, números, punto o guión.
  • `\.`: Un punto (recordemos que debemos escaparlo con `\`).
  • `[a-zA-Z]{2,}` : Dos o más letras (para el dominio de nivel superior, como 'com', 'org', 'net').

Ejemplos de Código

Ejemplo de validación de un email con una expresión regular en Kotlin.

Lenguaje: Kotlin
kotlin

Explicación del código:

  1. Línea 1: `fun isValidEmail(email: String): Boolean`: Esta línea define una función llamada `isValidEmail` que recibe un email (una cadena de texto) y devuelve un valor booleano (`true` si el email es válido, `false` si no lo es).
  2. Línea 2: `val regex = Regex("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}")`: Aquí creamos una expresión regular (que ya explicamos en la sección anterior) y la guardamos en una variable llamada `regex`. `Regex()` es como un constructor para crear un objeto de tipo `Regex`.
  3. Línea 3: `return regex.matches(email)`: Esta línea usa la función `matches()` del objeto `Regex` para ver si el email coincide con el patrón definido en la expresión regular. Si coincide, devuelve `true`, si no, devuelve `false`.
  4. Línea 4: `fun main()`: La función principal donde se ejecuta el código.
  5. Línea 5: `println(isValidEmail("usuario@dominio.com")) // true`: Aquí llamamos a la función `isValidEmail` con un email válido y mostramos el resultado (`true`) en la consola.
  6. Línea 6: `println(isValidEmail("usuario.invalido")) // false`: Aquí llamamos a la función `isValidEmail` con un email inválido y mostramos el resultado (`false`) en la consola.

Ejemplo de búsqueda de números de teléfono en una cadena.

Lenguaje: Kotlin
kotlin

Explicación del código:

  1. Línea 1: `fun findPhoneNumbers(text: String): List<String>`: Define una función llamada `findPhoneNumbers` que toma un texto como entrada y devuelve una lista de números de teléfono (cadenas de texto).
  2. Línea 2: `val regex = Regex("\\d{3}-\\d{3}-\\d{4}")`: Crea una expresión regular que busca números de teléfono con el formato XXX-XXX-XXXX. `\\d` representa un dígito (0-9), y `{3}` significa 'exactamente tres veces'. El guión `-` se busca literalmente.
  3. Línea 3: `return regex.findAll(text).map { it.value }.toList()`: `regex.findAll(text)` encuentra *todas* las coincidencias de la expresión regular en el texto. `map { it.value }` extrae el valor de cada coincidencia (el número de teléfono encontrado). `toList()` convierte el resultado en una lista.
  4. Línea 4: `fun main()`: La función principal donde se ejecuta el código.
  5. Línea 5: `val texto = "Llama al 555-123-4567 o al 555-987-6543 para más información."`: Define un texto de ejemplo que contiene números de teléfono.
  6. Línea 6: `val numeros = findPhoneNumbers(texto)`: Llama a la función `findPhoneNumbers` para buscar los números de teléfono en el texto.
  7. Línea 7: `println("Números de teléfono encontrados: $numeros")`: Imprime los números de teléfono encontrados en la consola.

Recursos relacionados

Explora más contenido relacionado con Expresiones Regulares en Kotlin para profundizar tus conocimientos.