test - ¿Son buenas las herramientas regex(como RegexBuddy)?
regex perl online (11)
Como han dicho otros, creo que usar o no usar una herramienta de este tipo es un problema neutral. Más al punto: si una expresión regular es tan complicada que necesita comentarios en línea, es demasiado complicada. Nunca comento mis expresiones regulares. Abordo problemas de emparejamiento grandes o complejos dividiéndolo en varios pasos de coincidencia, ya sea con múltiples declaraciones de coincidencia (= ~), o construyendo una expresión regular con subrexexgresiones.
Habiendo dicho todo eso, creo que cualquier desarrollador que se precie debería ser razonablemente competente en la escritura y lectura de expresiones regulares. He estado usando expresiones regulares durante años y nunca he encontrado un momento en el que necesite escribir o leer uno que sea tremendamente complejo. Pero una de tamaño moderado puede ser la forma más elegante y concisa de hacer una validación o coincidencia, y las expresiones regulares no se deben evitar solo porque un desarrollador inexperto puede no ser capaz de leerlo, es mejor educar a ese desarrollador.
Uno de mis desarrolladores ha comenzado a usar RegexBuddy para ayudarme a interpretar el código heredado, que es un uso que entiendo y soporto completamente. Lo que me preocupa es usar una herramienta de expresión regular para escribir un nuevo código. De hecho, he desalentado su uso para el nuevo código en mi equipo. Dos citas vienen a la mente:
Algunas personas, cuando se enfrentan con un problema, piensan "Lo sé, usaré expresiones regulares". Ahora ellos tienen dos problemas. - Jamie Zawinski
Y:
La depuración es el doble de difícil que escribir el código en primer lugar. Por lo tanto, si escribe el código de la manera más inteligente posible, por definición, no es lo suficientemente inteligente como para depurarlo. - Brian Kernighan
Mis preocupaciones son (respectivamente :)
Que la herramienta puede hacer posible resolver un problema usando una expresión regular complicada que realmente no la necesita. (Ver también esta pregunta ).
Que mi único desarrollador, usando herramientas de expresiones regulares, empiece a escribir expresiones regulares que (incluso con comentarios) no pueden ser mantenidas por alguien que no tenga (y sepa usar) herramientas de expresiones regulares.
¿Debería alentar o desalentar el uso de herramientas de expresiones regulares, específicamente con respecto a la producción de nuevos códigos? ¿Mis preocupaciones están justificadas? ¿O estoy siendo paranoico?
La mala programación rara vez es culpa de la herramienta. Es culpa del desarrollador no entender la herramienta. Para mí, esto es como decir que un carpintero no debería tener un destornillador porque podría usar un tornillo donde un clavo hubiera sido más apropiado.
Las expresiones regulares son solo una de las muchas herramientas disponibles para usted. En general, no estoy de acuerdo con la cita de Zawinski, citada con frecuencia, ya que con cualquier tecnología o técnica, existen formas buenas y malas para aplicarlas.
Personalmente, veo cosas como RegexBuddy y el Entrenador Regex gratuito principalmente como herramientas de aprendizaje. Ciertamente hay momentos en los que pueden ser útiles para depurar o comprender las expresiones regulares existentes, pero en general, si ha escrito su expresión regular utilizando una herramienta, será muy difícil mantenerla.
Como programador de Perl, estoy muy familiarizado con las expresiones regulares buenas y malas, y he estado usando incluso las más complicadas en el código de producción con éxito durante muchos años. Estas son algunas de las pautas a las que me gusta adherir que se han recopilado de varios lugares:
- No use una expresión regular cuando lo haga una coincidencia de cadenas. A menudo veo código en el que las personas usan expresiones regulares para hacer coincidir una cadena de forma insensible. Simplemente baje o mayúscula la secuencia y realice una comparación de cadena estándar.
- No use una expresión regular para ver si una cadena es uno de varios valores posibles. Esto es innecesariamente difícil de mantener. En su lugar, coloque los valores posibles en una matriz, hash (cualquiera que sea el idioma que proporcione) y pruebe la cadena contra esos.
- Escribir pruebas! Tener un conjunto de pruebas que se dirijan específicamente a su expresión regular hace que el desarrollo sea mucho más fácil, particularmente si es vagamente complicado. Además, algunas pruebas a menudo pueden responder muchas de las preguntas que es probable que tenga un programador de mantenimiento sobre su expresión regular.
- Construya su expresión regular de partes más pequeñas. Si realmente necesita una gran expresión regular complicada, protéjala de secciones más pequeñas y comprobables. Esto no solo facilita el desarrollo (ya que puede obtener cada sección más pequeña de forma individual), sino que también hace que el código sea más legible y flexible, y permite realizar comentarios minuciosos.
- Construya su expresión regular en una subrutina / función / método dedicado. Esto hace que sea muy fácil escribir pruebas para la expresión regular (y solo la expresión regular). también hace que el código en el que se usa su expresión regular sea más fácil de leer (¡una llamada de función muy bien llamada es considerablemente menos aterradora que un bloque de puntuación aleatoria!). Dejar caer grandes expresiones regulares en el medio de un bloque de código (donde no pueden probarse fácilmente de forma aislada) es extremadamente común y, por lo general, muy fácil de evitar.
Las expresiones regulares son una gran herramienta para muchos problemas de manejo de texto. Si tiene a alguien en su equipo que está escribiendo expresiones regulares que el resto del equipo no entiende, ¿por qué no hacer que le enseñen a los demás cómo están trabajando? En lugar de una amenaza, podrías ver esto como una oportunidad. De esa forma no tendrías que sentirte amenazado por lo desconocido y tendrás otra herramienta muy valiosa en tu arsenal.
Los comentarios de Zawinski, aunque entretenidamente simplistas, son fundamentalmente una exhibición de ignorancia y la escritura de expresiones regulares no es la codificación total, así que no me preocuparía por esas citas. Nadie tiene la totalidad de una discusión en una línea de todos modos.
Si se encontró con una expresión regular que era demasiado complicada para entender incluso con comentarios, entonces probablemente una expresión regular no era una buena solución para ese problema en particular, pero eso no significa que no tenga uso. Estaría dispuesto a apostar que si los has evitado deliberadamente, habrá lugares en tu base de código donde tienes muchas líneas de código y una sola, simple, Regex habría hecho el mismo trabajo.
Regexbuddy es un atajo útil, para asegurarse de que las expresiones regulares que está escribiendo hagan lo que usted espera, sin duda hace la vida más fácil, pero es cuestión de usarlas en absoluto lo que me parece importante sobre su pregunta.
Las herramientas de prueba Regex son invaluables. Los utilizo todo el tiempo. Mi trabajo ni siquiera es especialmente pesado, así que tener un programa que me guíe a través de los matices a medida que construyo mi base de conocimiento es crucial.
Lo que deberías hacer es conectar a tus desarrolladores con RB.
No te preocupes por esa cita completa de "2 probs"; parece que pudo haber sido una explosión en Perl (dijo en 1997) no en forma regular.
No estoy seguro de por qué hay tanta desconfianza contra la expresión regular.
Sí, pueden volverse desordenadas y oscuras, exactamente como cualquier otra pieza de código que alguien pueda escribir, pero tienen una ventaja sobre el código: representan el conjunto de cadenas que le interesan de una manera formalmente especificada (al menos por su lenguaje si hay son extensiones). Comprender qué conjunto de cadenas es aceptado por un fragmento de código requerirá una "ingeniería inversa" del código.
Claro, podrías disuadir el uso de la expresión regular como ya se ha hecho con la recursividad y los goto, pero esto se justificaría solo si hay una buena alternativa.
Preferiría mantener un código regex de línea única que unas funciones complicadas hechas a mano que intenten capturar un conjunto de cadenas.
Al usar una herramienta para entender una expresión regular (o escribir una nueva), ¡creo que está perfectamente bien! Si alguien lo escribió con la herramienta, ¡alguien más podría entenderlo con una herramienta! En realidad, si te preocupas por esto, vería las herramientas como RegexBuddy como tu mejor seguro de que el código no será imposible de mantener solo por las expresiones regulares.
Prefiero no usar herramientas de expresiones regulares. Si no puedo escribirlo a mano, significa que el resultado de la herramienta es algo que no entiendo y, por lo tanto, no puedo mantener. Prefiero pasar el tiempo leyendo sobre alguna característica de expresiones regulares que aprendiendo la herramienta de expresiones regulares. No entiendo la actitud de muchos programadores de que las expresiones regulares son un arte negro del que deben evitarse / aislarse. Es solo otro lenguaje de programación para aprender.
Es muy posible que una herramienta de expresión regular me ahorre algo de tiempo al implementar funciones de expresiones regulares que sí conozco, pero lo dudo ... puedo escribir muy rápido, y si entiendes bien la sintaxis (usando un editor de texto donde las expresiones regulares son idiomáticas) ayuda, uso gVim), la mayoría de las expresiones regulares realmente no son tan complejas. Creo que casi siempre se beneficiará aprendiendo mejor una tecnología que aprendiendo una muleta, a menos que la herramienta sea algo en donde pueda poner información simple y sacar muchos códigos repetitivos.
Debe alentar el uso de herramientas que hagan que sus desarrolladores sean más eficientes. Habiendo dicho eso, es importante asegurarse de que estén usando la herramienta adecuada para el trabajo. Tendrá que educar a todos los miembros de su equipo cuando sea apropiado usar una expresión regular y cuando se necesiten (less|more)
métodos potentes. Finalmente, cualquier expresión regular (en mi humilde opinión) debe ser comentada a fondo para garantizar que la próxima generación de desarrolladores pueda mantenerla.
Bueno, parece que la cura para eso es que algunas personas inteligentes introduzcan una herramienta de expresiones regulares que se anota a sí misma ya que coincide. Eso sugeriría que usar una herramienta no es tanto el problema como si existe una gran brecha entre lo que la herramienta entiende y lo que el programador entiende.
Entonces, la documentación puede ayudar.
Este es un ejemplo realmente trivial es una tabla como la siguiente (solo una sugerencia)
Expression Match Reason
^ Pos 0 Start of input
/s+ " " At least one space
(abs|floor|ceil) ceil One of "abs", "floor", or "ceil"
...
Veo el problema, sin embargo. Probablemente desee disuadir a las personas de crear expresiones regulares más complejas de lo que pueden analizar. Creo que los estándares pueden abordar esto, siempre requiriendo RE expandidas y verificando que la anotación sea correcta.
Sin embargo, si solo quieren depurar un RE, para asegurarse de que está actuando como creen que está actuando, entonces no es muy diferente de escribir el código que debe depurar.
Es relativo.
Un par de herramientas de expresiones regulares (para Node / JS , PHP y Python ) que hice (para algunos otros proyectos) están disponibles en línea para jugar y experimentar.