Muchos programadores conocen la alegría de crear rápidamente una expresión regular, en estos días a menudo con la ayuda de algún servicio web, o más tradicionalmente en el indicador 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: siga pirateando la cadena de aspecto críptico hasta que coincida y capture lo que desea y rechace lo que no desea.
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 la necesidad de editar una expresión regular, o simplemente codifican alrededor de una expresión regular en una base de código heredada. Con un poco de edición para dividirlo, por encima de regexp todavía es muy fácil de comprender para cualquiera que esté razonablemente familiarizado con regexps, y un veterano de regexp debería ver de inmediato lo que hace (responda al final del post, en caso de que alguien quiera el ejercicio de averiguarlo ellos mismos.
Sin embargo, las cosas no necesitan ser mucho más complejas para que una expresión regular se convierta en algo realmente de solo escritura, e incluso con documentación diligente (lo que todos por supuesto hacen para todas las expresiones regulares complejas que escriben ...), la modificación de las expresiones regulares se convierte en una tarea desalentadora. También puede ser una tarea muy peligrosa, si regexp no se prueba cuidadosamente por unidad (pero todos por supuesto tienen pruebas de unidad completas para todas sus expresiones regulares complejas, tanto positivas como negativas ...).
Entonces, cuento, ¿existe una solución / alternativa de escritura y 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 multilingüe sería la mejor, en la medida en que las expresiones regulares sean multilingües.
Y luego, lo que hace la expresión regular anterior es esto: analiza una cadena de números en formato 1:2:3.4
, capturando cada número, donde se permiten espacios y solo se requiere 3
.