Muchos programadores conocen la alegría de generar una expresión regular rápida, en estos días a menudo con la ayuda de algún servicio web, o más tradicionalmente en un mensaje interactivo, o tal vez escribiendo un pequeño script que tiene la expresión regular en desarrollo, y una colección de casos de prueba. . En cualquier caso, el proceso es iterativo y bastante rápido: sigue pirateando la cadena de aspecto críptico hasta que coincida y capture lo que quieres y rechazará lo que no quieres.
Para un caso simple, el resultado podría ser algo como esto, como una expresión regular de Java:
Pattern re = Pattern.compile(
"^\\s*(?:(?:([\\d]+)\\s*:\\s*)?(?:([\\d]+)\\s*:\\s*))?([\\d]+)(?:\\s*[.,]\\s*([0-9]+))?\\s*$"
);
Muchos programadores también conocen el dolor de tener que editar una expresión regular, o simplemente codificar alrededor de una expresión regular en una base de código heredada. Con un poco de edición para dividirlo, la expresión regular anterior todavía es muy fácil de comprender para cualquier persona razonablemente familiarizada con expresiones regulares, y un veterano de expresiones regulares debería ver de inmediato lo que hace (responda al final de la publicación, en caso de que alguien quiera el ejercicio) de resolverlo ellos mismos).
Sin embargo, las cosas no necesitan volverse mucho más complejas para que una expresión regular se convierta realmente en algo de solo escritura, e incluso con documentación diligente (lo que, por supuesto , todo el mundo hace para todas las expresiones regulares complejas que escriben ...), modificar las expresiones regulares se convierte en una tarea desalentadora. También puede ser una tarea muy peligrosa, si regexp no se prueba cuidadosamente en unidades (pero, por supuesto, todos tienen pruebas unitarias exhaustivas para todas sus expresiones regulares complejas, tanto positivas como negativas ...).
Entonces, para resumir, ¿hay una solución / alternativa de escritura-lectura para expresiones regulares sin perder su poder? ¿Cómo se vería la expresión regular anterior con un enfoque alternativo? Cualquier idioma está bien, aunque una solución en varios idiomas sería lo mejor, en la medida en que las expresiones regulares son en varios idiomas.
Y luego, lo que hace la expresión regular anterior es esto: analizar una cadena de números en formato 1:2:3.4
, capturando cada número, donde los espacios están permitidos y solo 3
se requieren.