2010-02-19 18 views
11

Mi chiedo perché ci debbano essere così tanti dialetti di espressioni regolari. Perché sembra così tante lingue, piuttosto che riutilizzare un dialetto provato e vero, sembra intenzionato a scrivere il proprio.Perché ci sono così tanti diversi dialetti di espressioni regolari?

Like these.

Voglio dire, capisco che alcuni di questi hanno ben diversi backend. Ma non dovrebbe essere astratto dal programmatore?

Mi riferisco più alle strane ma piccole differenze, come dove le parentesi devono essere sfuggite in una lingua, ma sono letterali in un'altra. O dove i meta-caratteri significano cose un po 'diverse.

C'è qualche ragione particolare per cui non possiamo avere una sorta di dialetto universale per le espressioni regolari? Penso che renderebbe le cose molto più semplici ai programmatori che devono lavorare in più lingue.

+0

Non so, forse gli sviluppatori di ciascun dialetto pensavano che il loro fosse migliore di tutti gli altri, o forse si adattava a un bisogno specifico al momento in cui altri non ancora lo facevano, e poi quando altri decisero di implementare quelle caratteristiche che pensavano potrebbero farlo meglio Non è come se ci fosse un comitato governativo del Regex centrale. – FrustratedWithFormsDesigner

+2

Non sarebbe quello che Posix dovrebbe essere :-)? – BigBeagle

+0

http://stackoverflow.com/a/11857890/874188 ha un po 'di background storico se è quello che cerchi. – tripleee

risposta

9

Perché le espressioni regolari hanno solo tre operazioni:

  • concatenazione
  • dell'Unione chiusura |
  • Kleene *

Tutto il resto è un interno o zucchero sintattico, e quindi non ha alcuna fonte per la standardizzazione. Cose come catturare gruppi, backreferences, classi di caratteri, operazioni di cardinalità, ecc. Sono tutte aggiunte alla definizione originale di espressioni regolari.

Alcune di queste estensioni rendono le "espressioni regolari" non più regolari. Sono in grado di decidere le lingue non regolari a causa di questi extra, ma continuiamo a chiamarli espressioni regolari a prescindere.

Come le persone aggiungono più estensioni, tenteranno spesso di utilizzare altre, comuni varianti di espressioni regolari. Ecco perché quasi ogni dialetto usa X+ per indicare "uno o più X", che a sua volta è solo una scorciatoia per scrivere .

Ma quando vengono aggiunte nuove funzionalità, non c'è alcuna base per la standardizzazione, quindi qualcuno deve inventare qualcosa. Se più di un gruppo di designer ha idee simili allo stesso tempo, avranno dialetti diversi.

3

Per lo stesso motivo, abbiamo così tante lingue. Alcune persone cercheranno di migliorare i loro strumenti e allo stesso tempo altri saranno resistenti al cambiamento. C/C++/Java/C# chiunque?

1

La sindrome di programmazione "I made it better" produce tutte queste cose. È lo stesso con gli standard. Le persone cercano di fare il prossimo "migliore" standard per sostituire tutti gli altri e diventa solo qualcos'altro per cui tutti dobbiamo imparare/progettare.

1

Penso che una buona parte di questo è la questione di chi sarebbe responsabile per l'impostazione e il mantenimento della sintassi standard e per garantire la compatibilità in ambienti diversi?

Inoltre, se una regex deve essere analizzata all'interno di un interprete/compilatore con le proprie regole uniche relative alla manipolazione delle stringhe, questo può causare la necessità di fare le cose in modo diverso per quanto riguarda gli escape e i letterali.

Una buona strategia è prendere tempo per capire come gli algoritmi delle espressioni regolari funzionano a un livello più astratto, quindi implementare qualsiasi sintassi particolare diventa molto più semplice. Simile a come ogni linguaggio di programmazione ha la propria sintassi per costrutti come le istruzioni condizionali e i loop, ma continua a svolgere lo stesso compito astratto.

Problemi correlati