Recientemente aprendí expresiones regulares y me encanta escribirlas / usarlas. Estoy buscando ideas y más oportunidades para usarlas, sin embargo, no quiero usarlas en exceso como una herramienta de uso múltiple, como a menudo advierten las personas.
¿Para qué tipo de cosas debo usar expresiones regulares y dónde no debo usarlas? (Aparte de lo obvio: análisis HTML).
self-improvement
regular-expressions
Haga clic en Upvote
fuente
fuente
if
en él.Respuestas:
Donde brillan es donde tiene una definición para una cadena que está bien definida y directa, por lo que puede (a) verificar que una entrada coincida con el patrón y (b) extraer todas las partes del patrón de esa entrada, en una sola operación regex.
Por ejemplo, justo el otro día tuve que lidiar con ciertos códigos que consistían en dos identificadores de una letra (uno de los cuales tenía tres opciones, el otro podría ser cualquier alfa), una fecha y luego un número de dos dígitos, como este : MR_20110508_01
Una expresión regular sencilla con 4 grupos con nombre me permitió hacer una sola llamada que verificó que un código entrante era válido y me dio 4 grupos con nombre a los que podía acceder para extraer las 4 piezas.
Cuanto más contenido arbitrario pueda contener el objetivo de la expresión regular, o más reglas que dependan de otras partes del contenido, más probabilidades hay de que te dirijas al infierno de "ahora tienes dos problemas" de Jamie Zawinski.
fuente
La mayoría de las tareas de coincidencia de cadenas pueden beneficiarse de las expresiones regulares. Cuando deja de llamarlo coincidencia y comienza a llamarlo análisis, las expresiones regulares no son tan útiles. Por lo general, esto se debe a que las personas tienden a llamarlo análisis cuando involucra anidamiento u otra recursión que las expresiones regulares no pueden manejar.
Probablemente el lugar donde más lo uso, donde algunas personas no saben que están disponibles, es en mi editor mientras busco algo. No llegan a mi código tan a menudo como ayudan a que mi codificación vaya más rápido.
fuente
Mi respuesta es negativa: no intente escribir un analizador sintáctico (por ejemplo, para HTML ) con expresiones regulares. Puede extraer todo tipo de información útil con ellos, pero hay algunas cosas que no puede hacer. Considero comprender las expresiones regulares a la par con SQL, C y Python: es uno de los componentes básicos de la informática moderna.
fuente
Diría que una señal reveladora de que una expresión regular no funcionará es cuando necesita algo que pueda anidarse. Por ejemplo, un lenguaje de programación (o HTML / XML / etc.). Una vez que comience a anidar, debe almacenar el estado y utilizar una máquina de estados.
Además, si mira las expresiones regulares para correo electrónico aquí , puede ver que las expresiones regulares pueden volverse ilegibles rápidamente. A veces, aunque puede usar expresiones regulares, usar una gramática aclara las cosas. Incluso con expresiones regulares más simples, puede comenzar rápidamente a hacer algo que sea difícil de leer / mantener.
Además, hay muchas tareas que no requieren expresiones regulares. Por ejemplo, puede dividir una cadena de campos separados por comas utilizando una expresión regular, pero es mucho más simple decir string.split (","). En general, una expresión regular requerirá múltiples pasos / búsquedas, mientras que la división lo hará en una sola declaración. Además, para una búsqueda simple, será más eficiente y más claro usar una rutina de búsqueda integrada.
fuente
Noté que la barra entre can y should en su pregunta no subraya la parte más importante: la diferencia entre los dos.
Hay cosas que se pueden hacer con expresiones regulares que no se deben hacer con ellas. Un ejemplo es usar la siguiente expresión regular:
que coincide con los números decimales divisibles por 7 (y solo aquellos; fuente ).
fuente
No hay reglas duras y rápidas aquí, pero diría que cualquier texto que posea una tarea que no tenga una biblioteca disponible está listo para expresiones regulares. También depende en gran medida del soporte de expresiones regulares del idioma que está utilizando. Perl tiene un amplio soporte para expresiones regulares, mientras que Java tiene menos. Por lo tanto, esperaría usar expresiones regulares más en perl que en java.
fuente