¿Es obligatorio que cada programador aprenda expresiones regulares? [cerrado]

82

Soy nuevo en programación, y en una entrevista recibí una pregunta sobre expresiones regulares; No hace falta decir que no pude responder. ¿Entonces me preguntaba si debería aprender la expresión regular? ¿Es imprescindible para todos los programadores de todos los campos? ¿O es imprescindible para la programación de algunos campos en particular?

Preguntas relacionadas:

usuario
fuente
55
Personalmente, sé cuáles son, cuándo usarlos y cómo buscar en Google la sintaxis. encoge de hombros
Tyanna
35
Es una necesidad para todos los usuarios avanzados. Y los programadores tienen que ser usuarios avanzados para ser productivos.
SK-logic
8
¿Por qué no quieres aprenderlos? Ya has encontrado al menos una situación en la que te hubieras beneficiado al conocerlos. ¿No es lógico que te encuentres en una situación similar en el futuro?
FishBasketGordo
23
Solo aquellos que trabajan con texto :)
Steve Jackson

Respuestas:

113

Las expresiones regulares son una herramienta increíblemente conveniente, disponible en tantos idiomas que la mayoría de los desarrolladores las aprenderán tarde o temprano.

Para un entrevistador, son una buena manera de probar la experiencia durante una entrevista. Si está entrevistando a alguien que reclama años de experiencia y que no lo comprende, debe profundizar más.

ptyx
fuente
44
Estoy de acuerdo, es una buena pregunta para cualquier desarrollador experimentado. Pero preguntarle a un recién graduado sin experiencia laboral sobre ellos probablemente sea un poco injusto, a menos que realmente quisieran filtrar a los solicitantes sin experiencia práctica en programación.
SK-logic
2
@ SK-logic: depende de la escuela. Todos tuvimos un curso obligatorio en el segundo año que hizo un uso bastante intenso de las expresiones regulares (lo admito, ahí es donde me enganché con ellas;)). Y más de unos pocos cursos de nivel superior los mencionaron nuevamente, aunque nunca con tanta intensidad.
FrustratedWithFormsDesigner
Estoy de acuerdo con los comentarios anteriores: no esperaría que alguien recién salido de la escuela conozca necesariamente expresiones regulares. Pero aún podría preguntar.
ptyx
13
Soy matemático, por lo que no tengo experiencia formal en ciencias de la computación, pero habría pensado que las expresiones regulares en realidad se enseñaban en cursos universitarios, mientras discutía sobre gramáticas, analizadores, autómatas y otras cosas. De hecho, esperaba que alguien recién salido de la universidad tuviera un mejor conocimiento que un programador experimentado sin estudios de CS. : - /
Andrea
8
@Andrea, cuando estaba en la universidad (BS en Ciencias de la Computación), las expresiones regulares estaban cubiertas cuando aprendía sobre gramáticas y autómatas. Sin embargo, solo se cubrió el concepto formal, no las aplicaciones. No aprendimos la sintaxis de expresión regular POSIX o compatible con Perl, ni cómo usarlos en nuestra codificación. Aprendimos a dibujar un diagrama de estado de un autómata de estado finito, escribirlo como una expresión regular, etc. Las letras griegas estaban involucradas, no grep y archivos de texto.
Adam Jaskiewicz
54

Las expresiones regulares son una herramienta. Resulta ser una herramienta muy útil, por lo que muchas personas eligen aprender a usarla. Sin embargo, no hay ningún "requisito" para que usted aprenda a usar esta herramienta en particular, como tampoco lo es para que aprenda algo más.

eykanal
fuente
19
Esto es tan cierto como decir que comprender la lógica booleana es útil, pero no es obligatorio.
Oded
1
@Oded: No he encontrado ningún uso para la lógica booleana que se enseña en mi curso.
DeadMG
16
@DeadMG, uso lógica booleana todo el tiempo, como en las conversiones: if (!(foo && bar))=> if (!foo || !bar). Tal vez lo has estado usando y no te has dado cuenta, o tal vez no te han enseñado el material correcto.
zzzzBov
77
¿Te gusta el control de versiones? ¿O pruebas de software?
Konrad Rudolph
2
@ruakh: estoy de acuerdo en que son extremadamente útiles; Los uso yo mismo todo el tiempo. Creo que todos los programadores deberían aprender a usar expresiones regulares en algún momento de su carrera. La pregunta, sin embargo, no hizo eso.
eykanal
33

No me sorprendería si, por ejemplo, un programador de juegos o un programador en el LHC nunca aprendiera expresiones regulares. Incluso podría darle una oportunidad a un programador de juegos por no conocer SQL.

Pero, si está trabajando en sistemas de información de cualquier tipo, y si no conoce las expresiones regulares, se está perjudicando.

Por otro lado, no esperaría que su programador de IS estándar conozca las matemáticas de matriz que un programador de juegos conocería. Existen distintas disciplinas de programador, sin embargo, debemos estar bajo el paraguas de los "sistemas de información".

Jonathan Rich
fuente
1
Los programadores en el LHC pueden usar expresiones regulares para buscar a través de archivos de datos producidos por sensores. Los programadores de juegos pueden usar expresiones regulares para buscar los archivos de registro producidos por sus juegos. Ok, es posible que no tengan que hacerlo, pero probablemente podría hacer que tales tareas sean mucho más fáciles.
FrustratedWithFormsDesigner
1
Estoy de acuerdo, pero si estuviera entrevistando para un puesto de programador de juegos, todavía contrataría a alguien si no supieran cuál es una expresión regular. Si estuviera contratando a alguien en un rol tradicional de programación de negocios que no supiera cuáles eran las expresiones regulares, probablemente no serían contratados.
Jonathan Rich
Eso es justo, supongo.
FrustratedWithFormsDesigner
77
Los físicos de partículas trabajan principalmente en entornos unix, pero como todo lo relacionado con la computadora en esa comunidad, la mayoría de las habilidades se transmiten por tradiciones orales. Los niveles de sofisticación en expresiones regulares varían. Pero no buscamos los datos con expresiones regulares: hay demasiado y no está en formatos de texto. Buscamos registros y bases de datos ad hoc y código y documentación a medias, como todos los demás.
dmckee
1
@FrustratedWithFormsDesigner, no contrataría a un programador de juegos que no conociera la expresión regular. La programación es, por su propia naturaleza, intensiva en información, independientemente del campo . No importa lo que haga: en cualquier disciplina tiene código fuente, editores de texto con capacidad para expresiones regulares y archivos de registro. Sin expresiones regulares, será significativamente menos eficiente en la realización de ciertas tareas (incluso si no necesita escribir una sola línea de expresiones regulares en el juego enviado). No digo que regex sea necesario para un programador de juegos. Solo digo que no contrataría a uno que no lo supiera.
Ben Lee
22

Las expresiones regulares son una forma muy concisa de expresar cómo combinar patrones en el texto.

El requisito de analizar y extraer datos del texto o validar que algunos textos se ajustan a un patrón específico surge con mucha frecuencia en la programación, por lo que diría que sí, es importante aprender sobre ellos y comprenderlos.

Son una buena herramienta para tener en su caja de herramientas y espero que cualquier programador experimentado sepa cómo usarlos.

Uno de los mejores recursos para aprender sobre expresiones regulares es el libro de Jeffery Friedl, Mastering Regular Expressions . Es bastante avanzado, por lo que es posible que desee leerlo cuando haya tenido más experiencia.

Puede comenzar con el tutorial en regular-expressions.info .

Oded
fuente
2
Esto es para mí una cuestión de gustos. Realmente nunca los he necesitado. Los he usado en algunos proyectos, así que sé cómo funcionan, pero fácilmente podría haberlo hecho sin ellos y haberlos visto mal utilizados con más frecuencia de la que he sentido la necesidad de ellos. Para simplificar un patrón, también podría usar la manipulación de cadenas en complejo y es más rápido usar (e) BNF, al menos si me gusta, estoy acostumbrado a trabajar con analizadores
Rune FS
15

En contraste con la mayoría de las respuestas aquí, no creo que el conocimiento de los registros sea una habilidad necesaria para ser un programador productivo. Cuando entrevisto a los candidatos para un puesto, profundizaría si se sintieran obligados a desarrollar sus habilidades de autoexamen. ¿Por qué? a menudo se usan en lugares porque les gusta el martillo correcto, pero a menudo lo que necesitabas era un destornillador. Busque SO para HTML y expresiones regulares y verá bastantes preguntas y varias razones por las cuales la expresión regular no es adecuada.

Se requiere la capacidad de hacer una OOD adecuada antes de abogar por contratar a un entrevistado, el conocimiento de las expresiones regulares ciertamente no lo es. Y en realidad no creo que nadie crea que puede ser un programador más productivo que conoce expresiones regulares pero que carece de áreas como el análisis, el diseño y el conocimiento del marco utilizado

Claro que a veces son útiles, pero en mis más de 20 años como desarrollador profesional creo que los he usado menos de 20 veces en código (e incluso he codificado algunos scripts en perl). Los uso regularmente para hacer búsquedas y reemplazar sin embargo.

Runa FS
fuente
Los programadores que no conocen las expresiones regulares a menudo crean una gran pila de WTF cuando una expresión regular funcionaría muy bien. Los programadores que SOLO conocen expresiones regulares a menudo crean una pila más pequeña pero masivamente incorrecta de WTF que intentan procesar lenguajes no regulares (por ejemplo, HTML) con expresiones regulares.
Kevin Cline
14

Independientemente del dominio en el que esté trabajando, las expresiones regulares son una herramienta útil para conocer porque la mayoría de los lenguajes de programación están escritos como texto sin formato. Regex es, por lo tanto, una excelente manera de manipular y refactorizar su código fuente y está integrado en muchos editores de texto. He visto a innumerables programadores realizar cambios repetidos en los archivos de origen cuando una expresión regular haría los cambios de manera mucho más rápida y precisa.

De esto es de lo que habla el Capítulo 3 del Programador Pragmático, siendo el texto plano la "materia prima básica de la programación".

JohnTESlade
fuente
¿Por qué no usas una ide que admite la refactorización?
NimChimpsky
2
Si hubiera hecho la pregunta en esta publicación, le habría dado la marca de verificación. Esta es la razón más importante por la que nunca contrataría a alguien que no conociera la expresión regular. Es una poderosa herramienta de edición de código y búsqueda de registros , incluso si nunca necesita escribir una sola línea de código que la use. Alguien que no lo sabe será menos eficiente en ciertas tareas diarias.
Ben Lee
10

Jeff Atwood escribió un gran blog sobre expresiones regulares, en él hay una cita increíble:

Some people, when confronted with a problem, think "I know, I'll use regular 
expressions." Now they have two problems. [Jamie Zawinski]

También hay una gran respuesta a una buena pregunta sobre un desbordamiento de pila que quizás desee consultar.

Definitivamente deberías saber un poco al respecto. Las expresiones regulares son fáciles de aprender pero difíciles de dominar. No necesita aprender todo sobre él para comenzar a usarlo. Solo sé sensato al respecto.

 

tl; dr

Debe conocer la tecnología para poder tomar una buena decisión sobre cuándo usarla.

Makach
fuente
8

Trabajo en una base de código incrustada que no tiene una biblioteca de expresiones regulares disponible. Una tarea determinada requería 275 líneas de código, y tomó alrededor de dos semanas depurar todos los casos de esquina, de un lado a otro entre el probador y el desarrollador. Más tarde escribí una función para hacer lo mismo como parte de una utilidad de JavaScript. La exacta misma tarea utilizando expresiones regulares utiliza 10 líneas de código y funcionó a la perfección en unos 15 minutos.

¿ Necesitas expresiones regulares? Técnicamente no, pero es una tontería intencionalmente permanecer ignorante de una herramienta tan eficiente.

Karl Bielefeldt
fuente
6

para citar otra respuesta:

Las expresiones regulares son una forma muy concisa de expresar cómo combinar patrones en el texto.

Entonces, si esta es una parte importante de su trabajo, probablemente haya una mejor manera de diseñar el sistema que está desarrollando. A menos que mucho texto sea de dominio específico para su área (por ejemplo, bioinformática).

He trabajado en tres sistemas empresariales diferentes (en tres empresas diferentes durante diez años) y los he escrito menos de cinco veces, y eso incluye copiar y pegar un validador de correo electrónico básico dos veces.

NimChimpsky
fuente
2
Gran cantidad de texto siempre es específico del dominio. Eres un programador después de todo. El texto (en forma de código fuente) es su dominio. La manipulación eficiente del texto con expresiones regulares te convierte en un programador más eficiente.
Quanticle
2
@quantícula que no tiene ningún sentido. ¿Realmente manipulas tu código fuente con expresiones regulares? Eso suena como una pesadilla absoluta. Las expresiones regulares son parte de su código y su código interactúa con datos específicos del dominio.
NimChimpsky
3
Manipulo el código fuente con expresiones regulares. Refactorizar grandes porciones de código a mano es tedioso y propenso a errores. El uso de un editor que admita buscar y reemplazar expresiones regulares (pista: casi todos los editores admiten regexp buscar y reemplazar) hace que la refactorización sea mucho más fácil.
Quanticle
3
@Dunk no está diciendo que sea una gran ganancia de eficiencia durante la vida de un proyecto, sino que puede ser una gran ganancia en un período de tiempo pequeño. También he refactorizado donde había cientos, incluso miles, de cambios en docenas de archivos. A lo largo de la vida del proyecto, las horas ahorradas son insignificantes, pero seguramente no quise tomar las horas o días que me hubiera llevado hacer los mismos cambios a mano. Los IDE modernos pueden hacer algo de esto sin que usted escriba una expresión regular, pero a veces no puede (por ejemplo, volver a cablear un patrón de asignación común).
jmoreno
2
@NimChimpsky Regexps funciona en todas partes. Las IDE y las herramientas de refactorización solo funcionan para idiomas específicos. Por ejemplo, ¿me permitirá su herramienta de refactorización revisar todas mis plantillas y encontrar / eliminar una cadena que parezca un número de teléfono ( sites.google.com/site/steveyegge2/… )?
Quanticle
4

Las expresiones regulares pueden considerarse una herramienta de procesamiento muy útil, multiplataforma y multiplataforma. Puedo usar regex en mi código, puedo usar regex en mi editor, ¡puedo usar regex en la línea de comandos!

No es solo lo que necesita, o debe aprenderlos. Es mas como

¡GUAUU! ¡ME ENCANTA EL REGEX!

Xeoncross
fuente
4

No necesita conocer todas las pequeñas peculiaridades de expresiones regulares para ser un gran programador, especialmente porque todas tienden a variar un poco en diferentes implementaciones y lenguajes de programación. Lo que usted no necesita saber es

  • ¿Qué son las expresiones regulares y expresiones regulares?
  • ¿Qué tipo de cosas hacen de manera eficiente?
  • Qué tipo de cosas son ineficientes (analizar cosas anidadas, usar toneladas de referencias inversas)
  • Dónde obtener información sobre la sintaxis siempre que necesite leer o escribir una.

De todos modos, ni siquiera tiene que preocuparse demasiado por si tomará demasiado esfuerzo aprenderlos en primer lugar. Los operadores más sencillos ( ., *, |, (), etc) son casi universalmente presente y recorrer un largo camino!

hugomg
fuente
Creo que este es un muy buen punto. Saber cómo utilizar referencias y otras características avanzadas de algunos motores RE es solo moderadamente útil. En muchos / la mayoría de los casos, combinar el uso de RE con un poco de lógica es más legible y más fácil de mantener.
Mark Bessey
3

Como ya se mencionó, Regex es una herramienta , una herramienta muy útil en mi humilde opinión.

Considere este ejemplo:

//fomat number using string.replace and regex in javascript
function numberWithCommas(x) {
    return x.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, ",");
} 

Solo una línea para convertir, por ejemplo, un número como este 1000000.00 en "1,000,000.00"

Usar cualquier otro método será mucho más complejo

emont01
fuente
2
y esto no es complejo? esto usa varias características especiales que no están en el conjunto de expresiones regulares estándar. una longitud simple y relleno harían muy bien para este
trinquete monstruo
2

No es un deber. Solo necesita ser consciente de su existencia y cuándo usarlos. Los detalles de sintaxis son fáciles de encontrar y acertar utilizando google y herramientas en línea.

Guarida
fuente
2

Realmente te recomendaría que aprendas expresiones regulares. En el trabajo, cuando contratamos programadores, los candidatos que no conocen regexp generalmente se eliminan rápidamente. No porque necesiten absolutamente conocer expresiones regulares, sino porque es un muy buen indicador de su nivel de comprensión de la programación y el nivel de adicción a la programación.

Un programador real conoce sus expresiones regulares.

Sin embargo, esto es un poco parcial, ya que estoy principalmente involucrado en la programación web, donde las expresiones regulares son algo que seguramente encontrarás mucho, tanto en el lado del servidor como en el lado del cliente. Si usted fuera un programador de ensamblaje para un sistema integrado en un lavavajillas, probablemente no encontraría expresiones regulares. Pero aún podría ser útil, ya que en la mayoría de los casos es más capaz de manejar su entorno de desarrollo cuando conoce expresiones regulares (buscar y reemplazar, buscar un archivo, buscar en varios archivos, etc.).

Además, le resultará más fácil ser reconocido por otros programadores si lo sabe.

Aron Cederholm
fuente
Además, es inútil aprender las especificaciones completas de memoria al principio, ya que hay muchos dialectos diferentes. En su lugar, trate de concentrarse en aprender lo básico: (1) cree algunas expresiones regulares simples y aprenda el significado de. * + {} [] () y - y algunas clases básicas. (2) con una especificación dada en tus manos, trata de entender lo que está sucediendo en las expresiones regulares que encuentras.
Aron Cederholm
¿Para qué utilizas reg exps en tu desarrollo web? Es lo que hago y lo he usado como 5 veces en 10 años o más.
NimChimpsky
Para empezar: analizar o validar la entrada del usuario (por ejemplo, correo electrónico, código postal / código postal, formularios de búsqueda del usuario). Pero también para propósitos I18n y l10n para cadenas de traducción personalizadas y variables en múltiples idiomas / configuraciones regionales. Y seguro que han recibido ayuda con la detección de errores y el manejo de muchos errores. Y en el mundo de CMS / blogs / comentarios para el marcado de wiki / foro. Para datos externos (entrada del usuario, páginas raspadas, recursos sincronizados, etc.) análisis, manejo y reescritura de contenido / enlaces / lo que sea. Además, para todos los propósitos de estadísticas y registros (detección del navegador, clasificación de referencias, ...)
Aron Cederholm
-1 por un comentario tan ignorante "Un verdadero programador ..."
Dunk
Es una forma bastante superficial de validar la entrada del usuario y me sorprendería que sus expresiones regulares fueran 100% precisas (la validación por correo electrónico es la famosa). Y no asimilo estas "cadenas de traducción personalizadas y variables en varios idiomas / configuraciones regionales" que traduces entre idiomas usando regex's - er wtf? Propósitos de estadísticas: ¿haces estadísticas con expresiones regulares? Reescribir enlaces / contenido con expresiones regulares me parece un olor a código.
NimChimpsky
1

¿Es un deber? Ya sabes lo que DEBES saber: que existen, qué son y para qué sirven. Tu trabajo como programador es resolver problemas. Ahora sabe lo suficiente como para comenzar a factorizarlos en su solución para resolver su problema. ¿Deberías aprender expresiones regulares? Absolutamente. La prioridad depende de usted ... hay trabajos donde se usarán todos los días, y trabajos donde nunca se usarán. Una guía simple sería la cantidad de patrones que coinciden con los problemas que espera encontrar.

jmoreno
fuente
1

Hmm, necesito separar por comas y generar esta lista de cadenas, déjame escribir una función que contenga un bucle for que tome un argumento separador y seguir agregándolas juntas ... o simplemente podría usar este comando 'join' existente.

Necesito clasificar estos objetos complejos en función de un par de atributos que tiene cada objeto, permítanme recordarme cómo escribir una función de clasificación que haga eso, oh no, espera, solo puedo usar la función de clasificación estándar existente que admite este lenguaje. Tendré que aprender a escribir un comparador personalizado, pero no debería ser demasiado difícil, obviamente es mejor que mantener mi propia función de clasificación.

La idea de los métodos virtuales me asusta un poco, pero debería ayudarme a reducir estas listas, cada una para un tipo diferente de elemento, a una sola lista. Entonces no tengo que escribir media docena de declaraciones similares procesando cada lista de una manera diferente. Supongo que debería estudiar mucho y aprender esas cosas porque mi código será mucho más simple y limpio si lo hago.

Necesito extraer de este archivo de texto estos pares de palabras y valores entre todos estos otros ruidos, permítanme escribir un analizador de cincuenta líneas para leer los caracteres uno por uno y si uno de los caracteres parece el comienzo de lo que soy. buscando, estableceré esta variable de estado y comenzaré a analizarla de manera diferente, etc., por supuesto, mi caso es obviamente tan especial que nadie más se ha encontrado con un problema como este antes e inventó una solución genérica que toma una línea de código para hacerlo. Eso me recuerda que debería llevar esos libros de programación que nunca leí a la librería de segunda mano.

Benedicto
fuente
1

Respuesta corta: No, pero ... el conocimiento es poder.

Soy desarrollador web y encuentro que cualquier expresión regular que generalmente necesito ya ha sido escrita para mí. Sin embargo, he tenido problemas para copiar y pegar y no darme cuenta de lo que estaba haciendo o no, lo que es un peligro de copiar y pegar CUALQUIER COSA.

Un ejemplo: una expresión regular de correo electrónico que copié y pegué no permitió un período o más en un correo electrónico que está permitido en la especificación de la dirección de correo electrónico. De hecho, muchas personas usan gmail con [email protected] para que sea fácil filtrar 'sitename' si eligen enviar spam.

TheDPQ
fuente
0

¿expresiones regulares? Hmmm ... a veces es útil conocerlos, pero la mayoría de las veces siempre usas lo mismo. He usado regex con bastante frecuencia, pero no diría que soy bueno con él. No me gusta en absoluto y creo que hay cosas más importantes que saber que la expresión regular.

Pero en la validación de formuladores o datos es muy útil. Creo que casi todos los formularios profesionales están validados con expresiones regulares. ASP.NET usándolo.

Pero en absoluto: intente hacer una expresión cuando la necesite y guárdela. Los usará con suerte más de una vez. ¡Pero no pierdas tu tiempo con RegEx!

Smokefoot
fuente
0

Depende del área / plataforma en la que esté trabajando

  1. Para la aplicación de escritorio, puede vivir una vida kool sin saber nada sobre expresiones regulares. Pero ten en cuenta que Visual Studio tiene una búsqueda de expresiones regulares, pero me pregunto si alguien lo usa de manera regular. Estoy pensando que no (primero debes corregir tu expresión regular porque puedes hacer una búsqueda :)).

  2. Como desarrollador web, lo más probable es que tengas que aprender Expresión regular. Puede salirse con la suya porque puede encontrar fácilmente fragmentos de código en línea que serán suficientes para lo que necesite, pero el aprendizaje ayudará.

Hay áreas como documentación, litigios, asuntos legales donde la expresión regular es una herramienta indispensable. Tienes que saberlo Si no lo haces, simplemente no conseguirás el trabajo.

En resumen, si no es parte de una descripción del trabajo, ni se preocupe. Si te gusta aprenderlo, aprende por diversión.

Noname
fuente
0

Las expresiones regulares son una herramienta muy útil, y hay muchas situaciones en las que el programador debería usarlas. No debe aprenderlos todos de memoria para usar. Solo usa la referencia y haz tu tarea. Después de 10-20-50-100 (dependiendo del programador) tareas en las que ha utilizado expresiones regulares, las sabrá todas de memoria. Se están aprendiendo por sí mismos, no debes aprenderlos especialmente.

Larry Cinnabar
fuente
0

Ya veo muchas respuestas a esto, pero todas parecen ser sobre los méritos de conocer las expresiones regulares como una herramienta en la caja de herramientas del programador.

Prefiero pensar en las expresiones regulares como el tipo de conocimiento que amplía la comprensión de cómo funcionan las computadoras. Una vez que alguien realmente entiende lo que es un lenguaje regular, y que puede expresarlo con tres operaciones simples, creo que le brinda algo más que una simple herramienta para validar cadenas simples.

Se vuelven capaces de comprender mejor el análisis en general, que es útil para casi todo tipo de programación, y comprender mejor cómo funcionan las herramientas que usamos regularmente (compilador, editor, navegador, etc.).

Los beneficios prácticos de usar expresiones regulares son, por supuesto, enormes. Incluso si no "programa" con ellos, uso expresiones regulares haciendo buscar / reemplazar en mi editor todo el tiempo, y mido cuánto más productivos me hacen.

Entonces, aunque no es necesario, creo que es una de las primeras herramientas que un programador debe aprender.

Avi
fuente
0

Rob Pike no lo cree así :

Las expresiones regulares son difíciles de escribir, difíciles de escribir bien y pueden ser costosas en comparación con otras tecnologías. Las técnicas de análisis y lexing estándar son tan fáciles de escribir, tan generales y tan adaptables que no hay razón para usar expresiones regulares.

Otra forma de verlo es que los lexers y el análisis analítico coinciden con patrones definidos estáticamente, pero la fuerza de las expresiones regulares es que proporcionan una forma de expresar patrones dinámicamente. Son excelentes en editores de texto y herramientas de búsqueda, pero cuando sabes en tiempo de compilación qué cosas estás buscando, las expresiones regulares brindan mucha más generalidad y flexibilidad de lo que necesitas.

Alentar las expresiones regulares como una panacea para todos los problemas de procesamiento de texto no solo es una ingeniería perezosa y deficiente, sino que también refuerza su uso por parte de personas que no deberían usarlas en absoluto.

Vale la pena señalar que Pike reconoce que tienen un lugar, por supuesto, y en mi humilde opinión, las expresiones regulares son una herramienta bastante poderosa, que recompensa absolutamente el tiempo que he pasado aprendiendo a usar, y desde ese punto de vista, recomiendo absolutamente aprender ellos. Pero es posible que el problema real sea que son una curita que me ha permitido saber menos sobre lexing y análisis de lo que debería. :)

Weston C
fuente
0

Permítanme decir que las expresiones regulares a menudo son la herramienta adecuada para el trabajo y son bastante útiles, especialmente con aplicaciones que procesan mucho texto. Sin embargo, memorizarlos es una locura. Tengo una hoja de trucos pegada en mi pared que tiene todos los caracteres especiales, anclas, clases de personajes, modificadores de patrones, metacaracteres ... Solo dedique los 20 minutos que toma aprender a usarlos y obtener una hoja de trucos para mantener seguimiento de todo lo demás. Para todo lo que necesita es poder escribir una expresión regular cuando la necesite, que generalmente es aproximadamente cada 6 meses, casi siempre que encuentre un problema en el que sean la mejor herramienta para el trabajo. A menos que esté en Perl, Latex, Emacs o algún otro equipo de procesamiento de texto pesado.

Jonathan Henson
fuente