Ho iniziato a pensare che l'uso di espressioni regolari diminuisca la manutenibilità del codice. C'è qualcosa di malvagio riguardo alla chiarezza e al potere delle espressioni regolari. Perl lo mescola con effetti collaterali come gli operatori di default.Come scrivere più espressioni regolari mantenibili?
I DO ha l'abitudine di documentare le espressioni regolari con almeno una frase che fornisce l'intento di base e almeno un esempio di ciò che corrisponderebbe.
Poiché vengono create espressioni regolari, ritengo sia assolutamente necessario commentare i componenti più grandi di ciascun elemento nell'espressione. Nonostante questo anche le mie stesse espressioni regolari mi fanno grattarmi la testa come se stessi leggendo Klingon.
Hai intenzionalmente ridotto le tue espressioni regolari? Scomponete forse quelli più corti e più potenti in passi più semplici? Ho rinunciato ad annidare espressioni regolari. Esistono costrutti di espressioni regolari evitate a causa di problemi di maininabilità?
Non lasciare che questo esempio offuschi la domanda.
Se quanto segue da Michael Ash aveva una sorta di bug in esso, avresti qualche possibilità di fare qualsiasi cosa se non di buttare tutto via?
^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[13-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$
Per richiesta lo scopo esatto può essere trovato tramite collegamento del signor Ash sopra.
corrispondenze 01.1.02 | 11-30-2001 | 29/2/2000
Non corrispondenti 02/29/01 | 13/01/2002 | 11/00/02
In attesa di risposte su questo. Tendo a pensare che non c'è una buona risposta, tanto quanto amo regex;). – RedBlueThing
Per mantenere le vostre espressioni regolari e mantenibili suggerisco succo di prugna. – jerebear
Per quanto riguarda la regex grande e pelosa: sì, lo farei. Alcune prospettive, almeno. Non è davvero più illeggibile del capitolo medio di Dostoevskij. – chaos