Construir Expresiones Regulares
Pasos para construir una expresión regular
- 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.
- Desglosa el patrón: Divide el objetivo en partes más pequeñas y analiza cada parte por separado.
- Elige los metacaracteres adecuados: Usa los metacaracteres y constructos de expresiones regulares para definir cada parte del patrón.
- Construye la expresión regular: Une todas las partes usando los metacaracteres adecuados.
- 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 exactamentenrepeticiones del carácter o grupo anterior.{n,}: Coincide conno más repeticiones del carácter o grupo anterior.{n,m}: Coincide con entrenymrepeticiones 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|bcoincide conaob).
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
- Define el objetivo: Queremos validar una dirección de correo electrónico.
- 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).
- Parte local (antes del
- Elige los metacaracteres:
\wpara caracteres de palabra..para cualquier carácter.@como carácter literal.[a-zA-Z0-9-]para el dominio.\.para el punto en el dominio.
- 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
- Define el objetivo: Queremos validar una fecha separada por puntos.
- 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.
- Elige los metacaracteres:
\bIndica un limite de palabra\dPara cualquier digito.\.Para el punto como carácter.
- Construye la expresión regular:
\b\d{1,2}\.\d{1,2}\.(\d{2}|\d{4})\bDesglose:
\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
- 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.
