Las expresiones regulares pueden volverse bastante complejas. La falta de espacio en blanco los hace difíciles de leer. No puedo pasar por una expresión regular con un depurador. Entonces, ¿cómo depuran los expertos las expresiones regulares complejas?
Creo que "probar" su expresión regular es mucho más importante que "depurarla". Por lo general, puede darse cuenta de lo que está sucediendo con una expresión regular mirando el resultado con bastante facilidad (o usando una de las herramientas sugeridas en las respuestas), pero para estar realmente seguro de que hace lo que quiere decir, debe probar su expresión regular con todos los casos de borde posibles. Las pruebas con el tiempo aclarará lo que realmente quieres hacer y hacer que la depuración inútil :)
baol
77
Esto parece interesante: http://www.debuggex.com/ (Dado que la pregunta está cerrada, no puedo agregar una respuesta real).
KajMagnus
Si tiene Visual Studio, puede establecer un punto de interrupción cerca de su área problemática (p. Ej .: RegEx.Replace(...), cambie a 'Ventana inmediata' y pruebe algunos 'Regex.IsMatch(yourDebugInputString, yourDebugInputRegEx)comandos para cero rápidamente en el problema.
DeepSpace101
2
Estoy muy sorprendido de que nadie parezca haber mencionado regex101.com que tiene un depurador real y también está alojado en la web.
mechalynx
1
Incluso en 2017, creo que regexbuddy sigue siendo la mejor herramienta que puedo encontrar, y el precio sigue siendo de $ 40. A menudo trabajo en diferentes idiomas con diferente sabor de expresiones regulares, por lo que a menudo me confundo. Con regexbuddy, simplemente me libera de la sintaxis
code4j
Respuestas:
68
Usted compra RegexBuddy y utiliza su función de depuración integrada . Si trabaja con expresiones regulares más de dos veces al año, recuperará este dinero en el tiempo ahorrado en poco tiempo. RegexBuddy también lo ayudará a crear expresiones regulares simples y complejas, e incluso generar el código para usted en una variedad de idiomas.
Además, según el desarrollador, esta herramienta se ejecuta casi sin problemas en Linux cuando se usa con WINE .
Lástima que es solo para Windows y cuesta US $ 40.
kennytm
25
Se ejecuta en Linux a través de WINE, según el desarrollador: regexbuddy.com/wine.html . Y sobre el costo de $ 40 ... ¿cuánto vale su tiempo?
Mick
18
Esto no es software libre.
codeholic
38
¿Quién dijo que era o lo pidió?
Tim Pietzcker
21
Bueno, como dijo Mick, ¿cuánto vale tu tiempo? "Las mejores herramientas que el dinero puede comprar" no siempre tienen que costar dinero, pero a veces lo hacen. Además, JGSoft desarrolla constantemente productos de gran calidad con un servicio de usuario excepcional. Incluso les he comprado software que realmente no necesito (como RegexMagic) porque me gustaría apoyarlos y mantenerlos en el negocio. No sabes lo que te estás perdiendo. Seriamente.
Tim Pietzcker
52
Con Perl 5.10, use re 'debug';. (O bien debugcolor, pero no puedo formatear la salida correctamente en Stack Overflow).
Además, puede agregar espacios en blanco y comentarios a las expresiones regulares para que sean más legibles. En Perl, esto se hace con el /xmodificador. Con pcre, ahí está la PCRE_EXTENDEDbandera.
"foobar"=~/(.)# any character, followed by a
\1 # repeat of previously matched character/x;
pcre *pat = pcre_compile("(.) # any character, followed by a\n""\\1 # repeat of previously matched character\n",
PCRE_EXTENDED,...);
pcre_exec(pat, NULL,"foobar",...);
debuggex en realidad no funciona para mí: las fuentes son forzadas por JavaScript, aparentemente, y no funcionan (tengo fuentes monoespaciadas, la consola de firefox las usa perfectamente). Como consecuencia, la pantalla no se puede utilizar. Además, la prueba de JavaScript bloquea el navegador con muchos casos de prueba, para cada edición (no solo una vez cuando se dispara). Finalmente, algunas de las expresiones regulares propuestas tienen errores y no coinciden según lo previsto.
7heo.tk
28
Cuando me atoro en una expresión regular, generalmente me vuelvo a esto:
https://regexr.com/
Es perfecto para probar rápidamente dónde algo va mal.
Esta herramienta es realmente útil: está alojada en la web, por lo que no es necesario instalarla, es en tiempo real, por lo que la depuración es un sueño, e incluso tiene información sobre herramientas útil y una lista de caracteres especiales, en caso de que no recuerdes algo. Es perfecto, muchas gracias
Jason Ridge
Desafortunadamente, esta herramienta (aún) no le permite cambiar los delimitadores de expresiones regulares (incluso para el motor PCRE), se fijan como /(barras). Este es un espectáculo para mí.
MrWhite
19
Yo uso Kodos - El depurador de expresiones regulares de Python:
Kodos es una utilidad de la GUI de Python para crear, probar y depurar expresiones regulares para el lenguaje de programación Python. Kodos debería ayudar a cualquier desarrollador a desarrollar expresiones regulares y sin esfuerzo en Python. Dado que la implementación de expresiones regulares de Python se basa en el estándar PCRE , Kodos debería beneficiar a los desarrolladores en otros lenguajes de programación que también cumplan con el estándar PCRE (Perl, PHP, etc.).
Kodos no proporciona verdaderas funciones de depuración. No puede pisar la expresión regular ni pausar la ejecución.
sincero
¿Algún consejo para que funcione en una Mac? El sitio de Sourceforge no ofrece ninguna información sobre la instalación para Mac, y mi Google-fu parece estar fallando.
Adam Parkin
¿Aunque parece ser Python2 y no se ha actualizado desde 2006 (hace 14 años al momento de escribir)?
MrWhite
13
Creo que no lo hacen. Si su expresión regular es demasiado complicada y problemática hasta el punto de que necesita un depurador, debe crear un analizador específico o utilizar otro método. Será mucho más fácil de leer y mantener.
Amigo, ¿publicaste esto después de mirar la captura de pantalla regexbuddy?
torre
2
Todos estarán en desacuerdo con esto, pero no es una mala idea. Todos asumen que el motor regex es más eficiente con enormes expresiones regulares. Esto no es necesariamente cierto, y definitivamente no son fáciles de leer. Rompe tus expresiones regulares.
Dan Rosenstark
1
@ Michael Brooks: No, antes, en realidad. Después de ver la captura de pantalla, estoy de acuerdo con el hecho de que PUEDE depurar una expresión regular. Pero mantengo mi idea: cuando una expresión regular se vuelve demasiado complicada, es hora de cambiar de otra manera.
Valentin Rocher
12
Existe una excelente herramienta gratuita, el Regex Coach . La última versión solo está disponible para Windows; su autor, el Dr. Edmund Weitz, dejó de mantener la versión de Linux porque muy pocas personas la descargaron, pero hay una versión anterior para Linux en la página de descarga.
Acabo de ver una presentación de Regexp :: Debugger por su creador: Damian Conway. Cosas muy impresionantes: ejecutar in situ o usar una herramienta de línea de comando (rxrx), interactivamente o en un archivo de ejecución "registrado" (almacenado en JSON), avanzar y retroceder en cualquier punto, detenerse en puntos de interrupción o eventos, salida en color (configurable por el usuario ), mapas de calor en expresiones regulares y cadenas para la optimización, etc.
Depuro mis expresiones regulares con mis propios ojos. Es por eso que uso /xmodificador, escribo comentarios para ellos y los divido en partes. Lea las expresiones regulares de dominio de Jeffrey Friedl para aprender a desarrollar expresiones regulares rápidas y legibles. Varias herramientas de depuración de expresiones regulares solo provocan la programación de vudú.
En cuanto a mí, generalmente uso la utilidad pcretest que puede volcar el código de byte de cualquier expresión regular, y generalmente es mucho más fácil de leer (al menos para mí). Ejemplo:
PCRE version 8.30-PT1 2012-01-01
re>/ab|c[de]/iB
------------------------------------------------------------------07Bra3/i ab
738Alt10/i c
12[DEde]4545Ket48End------------------------------------------------------------------
Si me siento atrapado, me gusta ir hacia atrás y generar la expresión regular directamente de un texto de muestra usando txt2re (aunque generalmente termino ajustando la expresión regular resultante a mano).
Escribir registros usando una notación como PCRE es como escribir ensamblador: está bien si solo puedes ver los autómatas de estado finito correspondientes en tu cabeza, pero puede ser difícil de mantener muy rápidamente.
Las razones para no usar un depurador son muy similares a las de no usar un depurador con un lenguaje de programación: puede corregir errores locales, pero no lo ayudarán a resolver los problemas de diseño que lo llevaron a cometer los errores locales en un primer momento. sitio.
La forma más reflexiva es usar representaciones de datos para generar expresiones regulares en su lenguaje de programación, y tener abstracciones apropiadas para construirlas. La introducción de Olin Shiver a su notación regexp de esquema ofrece una excelente visión general de los problemas que se enfrentan al diseñar estas representaciones de datos.
Los combinadores de analizador son realmente una forma increíble de ir: Parsec y PArrows en Haskell, rsec en Ruby, Boost Spirit en C ++, PyParsing en Python, Perl6 :: Reglas en Perl, etc.
efímero
2
A menudo uso pcretest, apenas un "depurador", pero funciona a través de una conexión SSH de solo texto y analiza exactamente el dialecto regex que necesito: mi código (C ++) se vincula a libpcre, por lo que no hay dificultad con diferencias sutiles en lo que es mágico y qué no es, etc.
En general, estoy de acuerdo con el tipo de arriba para quien necesitar un depurador de expresiones regulares es un olor a código. Para mí, lo más difícil de usar expresiones regulares generalmente no es la expresión regular en sí misma, sino las múltiples capas de citas necesarias para que funcionen.
Para mí, después de haber analizado la expresión regular (ya que soy bastante fluido, y casi siempre uso / x o equivalente), podría depurar en lugar de probar si no estoy seguro de si llegaría a una coincidencia degenerada (es decir, algo que retrocede excesivamente) para ver si podía resolver tales problemas modificando la codicia de un operador, por ejemplo.
Para hacer eso, usaría uno de los métodos mencionados anteriormente: pcretest, RegexBuddy (si mi lugar de trabajo actual lo ha autorizado) o similar, y a veces lo cronometraré en Linqpad si estoy trabajando en expresiones regulares de C #.
(El truco perl es nuevo para mí, por lo que probablemente también lo agregue a mi kit de herramientas de expresiones regulares).
RegEx.Replace(...)
, cambie a 'Ventana inmediata' y pruebe algunos'Regex.IsMatch(yourDebugInputString, yourDebugInputRegEx)
comandos para cero rápidamente en el problema.Respuestas:
Usted compra RegexBuddy y utiliza su función de depuración integrada . Si trabaja con expresiones regulares más de dos veces al año, recuperará este dinero en el tiempo ahorrado en poco tiempo. RegexBuddy también lo ayudará a crear expresiones regulares simples y complejas, e incluso generar el código para usted en una variedad de idiomas.
Además, según el desarrollador, esta herramienta se ejecuta casi sin problemas en Linux cuando se usa con WINE .
fuente
Con Perl 5.10,
use re 'debug';
. (O biendebugcolor
, pero no puedo formatear la salida correctamente en Stack Overflow).Además, puede agregar espacios en blanco y comentarios a las expresiones regulares para que sean más legibles. En Perl, esto se hace con el
/x
modificador. Conpcre
, ahí está laPCRE_EXTENDED
bandera.fuente
Agregaré otro para no olvidarlo: debuggex
Es bueno porque es muy visual:
fuente
Cuando me atoro en una expresión regular, generalmente me vuelvo a esto: https://regexr.com/
Es perfecto para probar rápidamente dónde algo va mal.
fuente
/
(barras). Este es un espectáculo para mí.Yo uso Kodos - El depurador de expresiones regulares de Python:
Se ejecuta en Linux, Unix, Windows, Mac.
fuente
Creo que no lo hacen. Si su expresión regular es demasiado complicada y problemática hasta el punto de que necesita un depurador, debe crear un analizador específico o utilizar otro método. Será mucho más fácil de leer y mantener.
fuente
Existe una excelente herramienta gratuita, el Regex Coach . La última versión solo está disponible para Windows; su autor, el Dr. Edmund Weitz, dejó de mantener la versión de Linux porque muy pocas personas la descargaron, pero hay una versión anterior para Linux en la página de descarga.
fuente
Acabo de ver una presentación de Regexp :: Debugger por su creador: Damian Conway. Cosas muy impresionantes: ejecutar in situ o usar una herramienta de línea de comando (rxrx), interactivamente o en un archivo de ejecución "registrado" (almacenado en JSON), avanzar y retroceder en cualquier punto, detenerse en puntos de interrupción o eventos, salida en color (configurable por el usuario ), mapas de calor en expresiones regulares y cadenas para la optimización, etc.
Disponible en CPAN de forma gratuita: http://search.cpan.org/~dconway/Regexp-Debugger/lib/Regexp/Debugger.pm
fuente
Utilizo esta herramienta en línea para depurar mi expresión regular:
https://www.regextester.com/
Pero sí, no puede vencer a RegexBuddy.
fuente
Depuro mis expresiones regulares con mis propios ojos. Es por eso que uso
/x
modificador, escribo comentarios para ellos y los divido en partes. Lea las expresiones regulares de dominio de Jeffrey Friedl para aprender a desarrollar expresiones regulares rápidas y legibles. Varias herramientas de depuración de expresiones regulares solo provocan la programación de vudú.fuente
En cuanto a mí, generalmente uso la utilidad pcretest que puede volcar el código de byte de cualquier expresión regular, y generalmente es mucho más fácil de leer (al menos para mí). Ejemplo:
fuente
Yo suelo:
http://regexlib.com/RETester.aspx
También puedes probar Regex Hero (usa Silverlight):
http://regexhero.net/tester/
fuente
Si me siento atrapado, me gusta ir hacia atrás y generar la expresión regular directamente de un texto de muestra usando txt2re (aunque generalmente termino ajustando la expresión regular resultante a mano).
fuente
Si eres un usuario de Mac, acabo de encontrar este:
http://atastypixel.com/blog/reginald-regex-explorer/
Es gratis y fácil de usar, y ha sido de gran ayuda para mí familiarizarme con RegExs en general.
fuente
Eche un vistazo a las herramientas (no gratuitas) en regular-expressions.info . RegexBuddy en particular. Aquí está la publicación de Jeff Atwood sobre el tema .
fuente
Escribir registros usando una notación como PCRE es como escribir ensamblador: está bien si solo puedes ver los autómatas de estado finito correspondientes en tu cabeza, pero puede ser difícil de mantener muy rápidamente.
Las razones para no usar un depurador son muy similares a las de no usar un depurador con un lenguaje de programación: puede corregir errores locales, pero no lo ayudarán a resolver los problemas de diseño que lo llevaron a cometer los errores locales en un primer momento. sitio.
La forma más reflexiva es usar representaciones de datos para generar expresiones regulares en su lenguaje de programación, y tener abstracciones apropiadas para construirlas. La introducción de Olin Shiver a su notación regexp de esquema ofrece una excelente visión general de los problemas que se enfrentan al diseñar estas representaciones de datos.
fuente
A menudo uso pcretest, apenas un "depurador", pero funciona a través de una conexión SSH de solo texto y analiza exactamente el dialecto regex que necesito: mi código (C ++) se vincula a libpcre, por lo que no hay dificultad con diferencias sutiles en lo que es mágico y qué no es, etc.
En general, estoy de acuerdo con el tipo de arriba para quien necesitar un depurador de expresiones regulares es un olor a código. Para mí, lo más difícil de usar expresiones regulares generalmente no es la expresión regular en sí misma, sino las múltiples capas de citas necesarias para que funcionen.
fuente
A menudo uso Ruby tester regexp tester Rubular
y también en Emacs use M-x re-builder
Firefox también tiene una extensión útil
fuente
Uso el kit de herramientas Rx incluido con ActiveState Komodo .
fuente
Puedes probar este http://www.pagecolumn.com/tool/regtest.htm
fuente
Para mí, después de haber analizado la expresión regular (ya que soy bastante fluido, y casi siempre uso / x o equivalente), podría depurar en lugar de probar si no estoy seguro de si llegaría a una coincidencia degenerada (es decir, algo que retrocede excesivamente) para ver si podía resolver tales problemas modificando la codicia de un operador, por ejemplo.
Para hacer eso, usaría uno de los métodos mencionados anteriormente: pcretest, RegexBuddy (si mi lugar de trabajo actual lo ha autorizado) o similar, y a veces lo cronometraré en Linqpad si estoy trabajando en expresiones regulares de C #.
(El truco perl es nuevo para mí, por lo que probablemente también lo agregue a mi kit de herramientas de expresiones regulares).
fuente