lunes, 24 de junio de 2024

Expresiones Regulares - Regex

Construir Expresiones Regulares

Construir Expresiones Regulares

Pasos para construir una expresión regular

  1. Define tu objetivo: ¿Qué quieres buscar o validar? Por ejemplo, puede ser un número de teléfono, una dirección de correo electrónico, una fecha, etc.
  2. Desglosa el patrón: Divide el objetivo en partes más pequeñas y analiza cada parte por separado.
  3. Elige los metacaracteres adecuados: Usa los metacaracteres y constructos de expresiones regulares para definir cada parte del patrón.
  4. Construye la expresión regular: Une todas las partes usando los metacaracteres adecuados.
  5. Prueba tu expresión regular: Utiliza herramientas en línea o scripts para probar tu expresión regular con diferentes entradas.

Metacaracteres en Expresiones Regulares

Metacaracteres Básicos

  • .: Coincide con cualquier carácter excepto una nueva línea.
  • ^: Coincide con el inicio de una línea.
  • $: Coincide con el final de una línea.
  • \: Escapa un metacaracter para que se trate como un carácter literal (por ejemplo, \. coincide con un punto literal).
  • []: Define un conjunto de caracteres. Coincide con cualquiera de los caracteres incluidos (por ejemplo, [a-z] coincide con cualquier letra minúscula).

Clases de Caracteres

  • \d: Coincide con cualquier dígito (equivalente a [0-9]).
  • \D: Coincide con cualquier carácter que no sea un dígito.
  • \w: Coincide con cualquier carácter de palabra (letras, dígitos y guion bajo) (equivalente a [a-zA-Z0-9_]).
  • \W: Coincide con cualquier carácter que no sea de palabra.
  • \s: Coincide con cualquier carácter de espacio en blanco (espacios, tabulaciones, saltos de línea).
  • \S: Coincide con cualquier carácter que no sea un espacio en blanco.

Cuantificadores

  • *: Coincide con cero o más repeticiones del carácter o grupo anterior.
  • +: Coincide con una o más repeticiones del carácter o grupo anterior.
  • ?: Coincide con cero o una repetición del carácter o grupo anterior.
  • {n}: Coincide con exactamente n repeticiones del carácter o grupo anterior.
  • {n,}: Coincide con n o más repeticiones del carácter o grupo anterior.
  • {n,m}: Coincide con entre n y m repeticiones del carácter o grupo anterior.

Anclas y Límite de Palabra

  • \b: Coincide con un límite de palabra (la posición entre un carácter de palabra y un carácter que no es de palabra).
  • \B: Coincide con una posición que no es un límite de palabra.

Grupos y Alternancia

  • (): Agrupa caracteres o subexpresiones. Los grupos capturados pueden ser referenciados posteriormente.
  • |: Actúa como un OR lógico entre patrones (por ejemplo, a|b coincide con a o b).

Ejemplo de Expresión Regular

Vamos a construir una expresión regular de ejemplo que use varios de estos metacaracteres para validar una dirección de correo electrónico simple:

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

Desglose

  • ^: Inicio de la línea.
  • [a-zA-Z0-9._%+-]+: Coincide con uno o más caracteres que pueden ser letras, dígitos, puntos, guiones, subguiones, signos de más o de porcentaje.
  • @: Coincide con el símbolo arroba.
  • [a-zA-Z0-9.-]+: Coincide con uno o más caracteres que pueden ser letras, dígitos, puntos o guiones.
  • \.: Coincide con un punto literal.
  • [a-zA-Z]{2,}: Coincide con dos o más letras.
  • $: Final de la línea.

Ejemplo 1: Construcción de una expresión regular para una dirección de correo electrónico

  1. Define el objetivo: Queremos validar una dirección de correo electrónico.
  2. Desglosa el patrón:
    • Parte local (antes del @): puede incluir letras, números, puntos, guiones y guiones bajos.
    • Símbolo @.
    • Dominio: puede incluir letras, números y guiones, seguido por un punto y un dominio superior (como .com, .org).
  3. Elige los metacaracteres:
    • \w para caracteres de palabra.
    • . para cualquier carácter.
    • @ como carácter literal.
    • [a-zA-Z0-9-] para el dominio.
    • \. para el punto en el dominio.
  4. Construye la expresión regular:
    ^[\w.-]+@[a-zA-Z0-9-]+\.[a-zA-Z]{2,6}$

    Desglose:

    • ^[\w.-]+: Parte local (caracteres de palabra, puntos y guiones).
    • @: Símbolo @.
    • [a-zA-Z0-9-]+: Dominio (letras, números y guiones).
    • \.: Punto en el dominio.
    • [a-zA-Z]{2,6}$: Dominio superior (2 a 6 letras).

Ejemplo 2: Construcción de una expresión regular para una fecha con puntos

La siguiente expresión regular valida fechas en los formatos 'DD.MM.AA' o 'DD.MM.AAAA':

\b\d{1,2}\.\d{1,2}\.(\d{2}|\d{4})\b

Esta expresión regular validará fechas en los formatos:
10.10.22, 10.10.2022, 1.10.22, 1.10.2222, 10.1.22 o 10.1.2222

  1. Define el objetivo: Queremos validar una fecha separada por puntos.
  2. Desglosa el patrón:
    • Día: Pueden ser uno (si se omite el cero a la izquierda) o dos digitos.
    • Mes: Pueden ser uno (si se omite el cero a la izquierda) o dos digitos.
    • Año: Pueden ser dos o cuatro digitos si es el año completo.
  3. Elige los metacaracteres:
    • \b Indica un limite de palabra
    • \d Para cualquier digito.
    • \. Para el punto como carácter.
  4. Construye la expresión regular:
    \b\d{1,2}\.\d{1,2}\.(\d{2}|\d{4})\b

    Desglose:

    • \b: Indica un límite de palabra.
    • \d{1,2}: Coincide con uno o dos dígitos (día y mes).
    • \.: Coincide con un punto literal.
    • (\d{2}|\d{4}): Coincide con dos o cuatro dígitos (año).
    • \b: Indica un límite de palabra.

Desglose de la expresión regular

  • \b: Indica un límite de palabra para asegurarse de que la fecha no es parte de una cadena más larga.
  • \d{2}: Coincide con exactamente dos dígitos para el día.
  • \.: Coincide con el carácter punto literal.
  • \d{2}: Coincide con exactamente dos dígitos para el mes.
  • \.: Coincide con el carácter punto literal.
  • \d{2}: Coincide con exactamente dos dígitos para el año en formato corto (AA).
  • (\d{2})?: Coincide opcionalmente con otros dos dígitos para el año en formato largo (AAAA).
  • \b: Indica un límite de palabra para asegurarse de que la fecha no es parte de una cadena más larga.

Ejemplo 3: Construcción de una expresión regular para una fecha limitada a dias del mes

La siguiente expresión regular valida fechas en los formatos:

  • 'DD-MM-AAAA'
  • 'DD MM AAAA'
  • 'DD_MM_AAAA'
  • DD-mes-AAAA'

^(?:[\w-]+[[:space:]]+)*(?:(?:0?[1-9]|[12][0-9]|3[01])(?:[\s_-])(?:0?[1-9]|1[0-2])(?:[\s_-])(?:\d{4}))((?:[\s_-]+[\w-]+)*)

Esta expresión regular busca una cadena que comienza con cero o mas palablas separadas por espacios, guiones o guiones bajos. Luego busca una fecha en los formatos especificados (DD-MM-AAAA, DD MM AAAA, DD_MM_AAAA o DD-mes-AAAA). Posteriormente captura cualquier cadena que siga a la fecha, pudiendo estar separada de la fecha por uno o mas espacio, guiones o guiones bajos.
10-10-2024 Nueva España.pdf, 10 10 2024 Nueva España.pdf, 10_10_2024 Nueva España.pdf, 10-10-2024 Nueva España-10-10-2024.pdf, Nueva_España_10_octubre_2024_Madrid.pdf o 2024-10-10_Madrid_Nueva_españa

  1. Construye la expresión regular:
    (?:(?:0?[1-9]|[12][0-9]|3[01])(?:[\s_-])(?:0?[1-9]|1[0-2])(?:[\s_-])(?:\d{4}))

    Desglose:

    • (?:(?:0?[1-9]|[12][0-9]|3[01]): busca un número de día que puede ser de uno o dos digitos y comprendido entre 1 y 31.
    • (?:[\s_-]): Busca un separador de fecha que puede ser un espacio en blanco, un guión o un guión bajo.
    • (?:0?[1-9]|1[0-2]): Busca un numero de mes que puede ser de uno o dos digitos y comprendido entre 1 y 12.
    • (?:[\s_-]): Busca otro separador de fecha.
    • (?:\d{4}): Busca un numero de año de cuatro dígitos.

Prueba tu expresión regular

Puedes usar herramientas en línea como regex101 para probar y depurar tus expresiones regulares.