Regular Expressions
Quando NON dovresti usare le espressioni regolari
Ricerca…
Osservazioni
Poiché le espressioni regolari sono limitate a una grammatica regolare oa una grammatica senza contesto, esistono molti abusi comuni delle espressioni regolari. Quindi in questo argomento ci sono alcuni esempi di quando NON si devono usare espressioni regolari, ma si usa invece la propria lingua preferita.
Alcune persone, di fronte a un problema, pensano:
"Lo so, userò le espressioni regolari."
Ora hanno due problemi.
- Jamie Zawinski
Coppie corrispondenti (come parentesi, parentesi ...)
Alcuni motori regex (come .NET) possono gestire espressioni context-free e lo risolvono. Ma questo non è il caso per la maggior parte dei motori standard. E anche se lo fanno, finirai per avere un'espressione complessa e difficile da leggere, mentre l'uso di una libreria di analisi potrebbe semplificare il lavoro.
Semplici operazioni con le stringhe
Poiché le espressioni regolari possono fare molto, si è tentati di usarle per le operazioni più semplici. Ma l'uso di un motore regex ha un costo in termini di memoria e utilizzo del processore: è necessario compilare l'espressione, archiviare l'automa in memoria, inizializzarlo e quindi alimentarlo con la stringa per eseguirlo.
E ci sono molti casi in cui non è proprio necessario usarlo! Qualunque sia la tua lingua di scelta, ha sempre gli strumenti di base per la manipolazione delle stringhe. Quindi, di norma, quando c'è uno strumento per fare un'azione nella tua libreria standard, usa quello strumento, non una regex:
- dividere una stringa?
Ad esempio il seguente frammento funziona in Python, Ruby e Javascript:
'foo.bar'.split('.')
Che è più facile da leggere e capire, oltre che molto più efficiente rispetto all'espressione regolare (in qualche modo) equivalente:
(\w+)\.(\w+)
- Striscia degli spazi finali?
Lo stesso vale per gli spazi finali!
'foobar '.strip() # python or ruby
'foobar '.trim() // javascript
Quale sarebbe equivalente alla seguente espressione:
([^\n]*)\s*$ # keeping \1 in the substitution
Analisi HTML (o XML, o JSON, o codice C o ...)
Se vuoi estrarre qualcosa da una pagina web (o qualsiasi linguaggio di rappresentazione / programmazione), una regex è lo strumento sbagliato per l'attività. Dovresti invece usare le librerie della tua lingua per raggiungere l'obiettivo.
Se vuoi leggere HTML, o XML o JSON, usa semplicemente la libreria che la analizza correttamente e la serve come oggetti utilizzabili nella tua lingua preferita! Finirai con codice leggibile e più gestibile e non finirai
- RegEx associa tag aperti ad eccezione dei tag autonomi XHTML
- Python che analizza l'HTML usando le espressioni regolari
- c'è una regex per generare tutti gli interi per un certo linguaggio di programmazione