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



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow