Qué hace esta herramienta
El probador de regex PCRE comprueba una expresión regular contra tu texto usando la biblioteca PCRE2 real, el mismo motor que usan PHP, las herramientas de estilo Perl y muchos servidores web. Las coincidencias se resaltan, cada una se lista con su posición y sus grupos de captura, y un reemplazo opcional muestra el resultado de una sustitución al estilo de preg_replace.
Probar con el motor real importa porque las expresiones regulares de PCRE y de JavaScript difieren en detalles pequeños pero importantes. Un patrón que funciona en un probador basado en el navegador puede no compilar en PHP, o coincidir con algo distinto.
Cómo se usa
- Escribe el patrón sin delimitadores en Patrón PCRE (sin delimitadores).
- Pega el texto en el que buscar en Texto de prueba.
- Activa los modificadores que necesites: g para todas las coincidencias (como preg_match_all), i, m, s, x, U y u para que
\w,\dy\breconozcan Unicode. - Si quieres, rellena Reemplazar con para previsualizar la sustitución. Usa
$1o${1}para grupos numerados,${name}para grupos con nombre y$0para la coincidencia completa.
Los patrones no válidos muestran el propio mensaje de error de PCRE2 y la posición del patrón en la que se detuvo.
Ejemplo
El patrón predeterminado \((?:[^()]++|(?R))*\) encuentra paréntesis equilibrados. Coincide con un par de paréntesis que contiene caracteres que no son paréntesis o, de forma recursiva, el patrón completo de nuevo. En el texto de ejemplo encuentra (a, g(b, c)) y ((x), y) e ignora el paréntesis sin cerrar del final. Las expresiones regulares de JavaScript no pueden expresar esto.
Prueba (?<amount>\d+(?:\.\d+)?)\s+(?<cur>USD|EUR) con el reemplazo ${cur} $1 para intercambiar importes y códigos de moneda en la segunda línea.
Funciones de PCRE que conviene conocer
- Los cuantificadores posesivos (
*+,++,?+) y los grupos atómicos ((?>...)) nunca devuelven lo que han capturado, lo que evita un backtracking descontrolado. \Kreinicia el inicio de la coincidencia, una alternativa sencilla al lookbehind.- La recursión con
(?R),(?1)o(?&name)coincide con estructuras anidadas. - Los modificadores en línea como
(?i)cambian el comportamiento en una parte del patrón.
Consejos
- En PHP, rodea el patrón con delimitadores como
/.../o~...~y elige uno que no aparezca en el patrón para no tener que escaparlo. - Activa u cuando tu texto contenga letras acentuadas o caracteres CJK para que
\wcoincida con ellos.
Preguntas frecuentes
› ¿En qué se diferencia del probador de regex de JavaScript?
Esta página ejecuta PCRE2, el motor que hay detrás de las funciones preg_ de PHP, Nginx, Apache y muchas otras herramientas, compilado a WebAssembly. Admite sintaxis que JavaScript no tiene, como la recursión con (?R), cuantificadores posesivos como a++, grupos atómicos, \K, grupos (?P<name>...) y los modificadores x y U.
› ¿Escribo los delimitadores, como /pattern/i?
No. Escribe solo el patrón y activa los modificadores con las casillas. En PHP, `preg_match('/\d+/i', $s)` corresponde al patrón `\d+` con Ignorar mayúsculas activado.
› ¿Por qué obtuve "match limit exceeded"?
Algunos patrones, como ^(a+)+$ sobre una cadena larga que no coincide, hacen backtracking un número exponencial de veces. El probador se detiene tras cinco millones de pasos para que la página siga respondiendo. PHP tiene una protección parecida, pcre.backtrack_limit, y preg_match devuelve false cuando se alcanza.
› ¿Se sube mi texto?
No. El módulo WebAssembly de PCRE2 se descarga una vez y todo se ejecuta en tu navegador.