${ error.pista || 'La expresión no es válida.' } ${ error.mensaje }

Ejemplos
La búsqueda tardaba más de 2 segundos y se ha parado: la expresión probablemente tiene backtracking catastrófico (mira el final de la página). No se ha podido buscar. Actualiza el navegador o prueba con otro. Escribe una expresión regular o carga un ejemplo. Escribe o pega el texto en el que buscar.

¿Qué es una expresión regular?

Una expresión regular (regex o regexp) es un patrón que describe un tipo de texto: «ocho cifras y una letra», «algo, una arroba, algo, un punto y algo». Sirve para buscar, comprobar si un dato tiene el formato correcto o reemplazar partes de un texto, y la entienden casi todos los lenguajes de programación, los editores de código y herramientas como Excel o Google Sheets.

Chuleta

EscribeSignificaEjemplo
.Cualquier carácter salvo el salto de línea (con la bandera s, también ese)c.sa → casa, cosa
\d \w \sUna cifra; una letra, cifra o _ (sin tildes ni ñ); un espacio, tabulador o salto de línea\d\d → 42
\D \W \SLo contrario: lo que no es cifra, letra o espacio\S+ → una palabra
[abc] [a-z]Uno de esos caracteres, o uno del rango[aeiou] → una vocal
[^abc]Cualquier carácter menos esos[^0-9] → lo que no es cifra
^ $Principio y final del texto (con la bandera m, de cada línea)^\d+$ → solo cifras
\bLímite de palabra\bsol\b → sol, pero no soldado
* + ?Lo anterior, 0 o más veces; 1 o más; 0 o 1colou?r → color, colour
{3} {2,4} {2,}Exactamente 3 veces; de 2 a 4; 2 o más\d{5} → 28013
*? +?Versión perezosa: lo menos posible<.+?> → una etiqueta HTML, no todas
(…)Grupo de captura: se guarda y se usa como $1 en el reemplazo(\d+)€
(?:…)Grupo sin captura: solo agrupa(?:ab)+ → ababab
(?<nombre>…)Grupo con nombre: $<nombre> en el reemplazo(?<anio>\d{4})
a|bUna cosa o la otragato|perro
\1Lo mismo que capturó el grupo 1(\w)\1 → ll, rr
(?=…) (?!…)Seguido de…, no seguido de… (sin incluirlo)\d+(?=€) → el número de 20€
(?<=…) (?<!…)Precedido de…, no precedido de…(?<=#)\w+ → el texto de un #hashtag
\. \* \(El carácter tal cual: los símbolos especiales se escapan con \\d+\.\d+ → 3.14

Las banderas

  • g (global): todas las coincidencias, no solo la primera.
  • i (sin mayúsculas): no distingue mayúsculas de minúsculas.
  • m (multilínea): ^ y $ marcan el principio y el final de cada línea.
  • s (punto total): el punto también coincide con los saltos de línea.
  • u (unicode): unicode completo: emojis y clases como \p{l}.

Expresiones regulares útiles

Las mismas que puedes cargar con un clic en los ejemplos de arriba. Comprueban el formato, no si el dato existe: para la letra del DNI usa el validador de NIF, NIE y CIF, y para los dígitos de control de una cuenta, el validador de IBAN.

ParaExpresiónQué hace
Email[\w.+-]+@[\w-]+(?:\.[\w-]+)*\.[A-Za-z]{2,}Direcciones de email dentro de un texto.
Teléfono(?:\+34[\s-]?|\b)[6-9](?:[\s-]?\d){8}\bTeléfonos españoles de 9 cifras, con o sin +34 y con espacios o guiones.
DNI y NIE\b(?:\d{8}|[XYZ]\d{7})[A-Z]\bEl formato del DNI y del NIE. No comprueba la letra.
Código postal\b(?:0[1-9]|[1-4]\d|5[0-2])\d{3}\bCódigos postales españoles: empiezan por el número de provincia, del 01 al 52.
IBAN\bES\d{2}(?:\s?\d{4}){5}\bIBAN español, con o sin espacios. No comprueba los dígitos de control.
Matrícula\b\d{4}[\s-]?[BCDFGHJKLMNPRSTVWXYZ]{3}\bMatrículas españolas desde el año 2000: cuatro cifras y tres consonantes, sin vocales, Ñ ni Q.
URLhttps?://[^\s<>"']+[^\s<>"'.,;:!?)]Enlaces dentro de un texto, sin el punto o la coma que los siga.
IP\b(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\bDirecciones IPv4, con cada número entre 0 y 255.
Fecha\b(?<dia>0?[1-9]|[12]\d|3[01])/(?<mes>0?[1-9]|1[0-2])/(?<anio>\d{4})\bFechas dd/mm/aaaa con grupos con nombre; el reemplazo las pasa a aaaa-mm-dd.
Color hex#(?:[0-9a-fA-F]{6}|[0-9a-fA-F]{3})\bColores en hexadecimal, de 3 o 6 cifras.
Palabras repetidas\b(\w+)\s+\1\bUna palabra escrita dos veces seguidas, con una referencia al grupo 1; el reemplazo deja una.
Espacios de más[ \t]{2,}Dos o más espacios o tabuladores seguidos; el reemplazo deja uno.

Tildes y eñes

\w solo incluye letras inglesas: no reconoce la á ni la ñ, así que \w+ parte «España» en dos. Para el español, escríbelas a mano ([\wáéíóúüñÁÉÍÓÚÜÑ]+) o activa la bandera u y usa \p{L}, que es cualquier letra de cualquier idioma.

JavaScript, PHP y otros lenguajes

Este probador usa el motor de JavaScript de tu navegador. PHP, Python, Java o .NET comparten casi toda la sintaxis, pero no toda. En PHP, la expresión va entre delimitadores ('/\d+/'), no existe la bandera g (se usa preg_match_all()) y, en el reemplazo, los grupos con nombre se escriben con su número. El código PHP de la pestaña «Código» ya tiene esos cambios hechos.

Cuidado con el backtracking catastrófico

Algunas expresiones, como (a+)+$ o (\w+\s?)+$, prueban todas las formas posibles de repartir el texto entre sus cuantificadores antes de rendirse, y con un texto que casi coincide el número de intentos se dispara: con 30 caracteres pueden ser más de mil millones. Una expresión así puede bloquear una página web o tumbar un servidor, y es un tipo de ataque conocido (ReDoS).

Este probador para la búsqueda a los 2 segundos y te avisa. Para evitarlo, no anides cuantificadores sobre lo mismo ((a+)+) y usa clases concretas en vez de .* cuando puedas. Pruébalo: busca (a+)+$ en aaaaaaaaaaaaaaaaaaaaaaaaaaaaaab.

Copiado al portapapeles.