SomeeLab.tools

Probador de expresiones regulares

Prueba una expresión regular sobre tu propio texto y observa cada coincidencia resaltada, con los grupos de captura y una vista previa del reemplazo.

Qué hace cada una de las cuatro banderas

Con g apagada solo se encuentra la primera coincidencia. Enciéndela para contar apariciones o reemplazarlas todas.

i ignora mayúsculas y minúsculas. m hace que ^ y $ se apliquen a cada línea en lugar de a la cadena entera, que es lo que hace falta al recortar comienzos de línea en un registro.

s permite que . también case con el salto de línea. Por defecto el punto se salta los saltos, así que un bloque repartido en varias líneas necesita esta bandera para caber entero.

Piezas que conviene memorizar

  • \d dígitos, \w letras, dígitos y guion bajo, \s espacios. En mayúscula (\D \W \S) significan lo contrario.
  • + uno o más, * ninguno o más, ? opcional, {2,4} entre dos y cuatro.
  • ^ principio, $ final, \b frontera de palabra.
  • (...) captura y aparece en el resultado; (?:...) agrupa sin capturar.
  • (?<nombre>...) da nombre a un grupo para leerlo por nombre en vez de por número.

Codicioso frente a perezoso

.* avanza todo lo que puede y luego retrocede. Sobre <b>uno</b><b>dos</b>, el patrón <b>.*</b> se traga el conjunto como una sola coincidencia.

Añadiendo ? para formar <b>.*?</b> se detiene en cuanto puede, y salen dos coincidencias. Para lo que va dentro de etiquetas o comillas, la versión perezosa suele ser la correcta.

Por qué se ejecuta en un hilo aparte

Los cuantificadores anidados pueden hacer estallar una expresión. Dale a (a+)+b una cadena de treinta caracteres a y el motor probará todas las formas de repartirlos, con lo que el trabajo crece en órdenes de magnitud. Una entrada minúscula lo ocupa durante minutos.

Esta herramienta evalúa el patrón en un hilo propio y lo mata por completo pasado un segundo. No hay forma de interrumpirlo a medias, porque todo ocurre dentro de una sola llamada. Por eso una expresión desbocada deja la página en marcha.

Ese mismo comportamiento en un servidor bloquea una petición entera. Si la entrada de usuario llega hasta una expresión regular en tu código, los cuantificadores anidados son lo primero que hay que buscar.

La sintaxis cambia según el lenguaje

Aquí corre la variante de JavaScript. La búsqueda hacia atrás ((?<=...)) funciona en los navegadores actuales, pero no existen funciones exclusivas de PCRE como la recursión o los grupos atómicos.

Python escribe los grupos con nombre como (?P<nombre>...), y Java necesita escapar otra vez las barras invertidas dentro de una cadena. Traduce la notación cuando te lleves un patrón afinado aquí.