Uso espressioni regolari su base giornaliera, dato che il mio lavoro quotidiano è del 90% in Perl (legacy codebase, ma questo è un altro problema). Nonostante questo, trovo ancora il lookhead e il look per essere terribilmente confuso e spesso illeggibile. In questo momento, se dovessi ottenere una revisione del codice con un lookahead o lookbehind, vorrei immediatamente inviarlo indietro per vedere se il problema può essere risolto utilizzando più espressioni regolari o un approccio diverso. I seguenti sono i principali motivi per cui tendo a non piacermi:
- Possono essere terribilmente illeggibili. Le asserzioni Lookahead, ad esempio, iniziano dall'inizio della stringa, indipendentemente da dove sono posizionate. Questo, tra l'altro , può causare alcuni "interessanti" "e comportamenti non ovvi.
- Un tempo il fatto che molte lingue non supportassero lookahead / lookbehind (o supportato come "funzionalità sperimentali"). Non è così tanto, ma c'è sempre la domanda su quanto sia supportato.
- Francamente, si sentono come un hack sporco. Spesso i regexps lo sono, ma possono anche essere piuttosto eleganti e hanno ottenuto un'accettazione diffusa.
- Sono arrivato senza averne bisogno ... a volte penso che siano estranei.
Ora ammetto che, in particolare, gli ultimi due motivi non sono davvero validi, ma ho sentito che dovrei enumerare ciò che passa per la mia mente quando ne vedo uno. Sono più che disposto a cambiare idea su di loro, ma sento che violano alcuni dei miei principi fondamentali di programmazione, tra cui:
- Il codice dovrebbe essere il più leggibile possibile senza sacrificare la funzionalità - questo può includere fare qualcosa in un modo meno efficiente, ma più chiaro purché la differenza sia trascurabile o non importante per l'applicazione nel suo insieme.
- Il codice dovrebbe essere mantenibile - se un altro programmatore arriva per risolvere il mio codice, un comportamento non ovvio può nascondere bug o rendere il codice funzionale apparente buggato (vedi leggibilità)
- "Lo strumento giusto per il lavoro giusto" - Sono sicuro che puoi inventare esempi forzati che potrebbero usare lookahead, ma non ho mai incontrato qualcosa che abbia davvero bisogno di loro nel mio lavoro di sviluppo nel mondo reale. C'è qualcosa che è davvero lo strumento migliore per, al contrario, per esempio, più espressioni regolari (o, in alternativa, sono lo strumento migliore per la maggior parte dei casi per cui sono usati oggi)?
La mia domanda è questa: È buona norma usare lookahead / lookbehind in espressioni regolari, o sono semplicemente un hack che ha trovato la loro strada nel moderno codice di produzione?
Sarei perfettamente felice di essere convinto di essermi sbagliato su questo, e semplici esempi sono utili per esempi o illustrazioni, ma da soli, non saranno sufficienti per convincermi.