Perché ci sono così tante varianti di espressioni regolari? [chiuso]


14

Oggi, quando ho rivisto il codice sorgente del nostro progetto, ho scoperto che ci sono molti "spazi" e "tab" non necessari situati alla fine di ogni riga. Così ho deciso di eliminarli con un'espressione regolare.

Tuttavia, ho scoperto che il comando sed -i '/\s+$/d'non funziona. Fino a quando non ho cambiato il comando in see -ri '/\s+$/d', ha funzionato come mia aspettativa. Dal manuale di sed, ha detto che -rinvoca regexp esteso.

Sono confuso, perché ci sono così tante varianti regexp? Come vim / emacs / perl / sed regexp. Perché regexp non può offrire un'interfaccia utente unica?

Risposte:


19

Per ragioni storiche. Non esiste una definizione di sintassi "Espressione regolare". Il concetto stesso di un'espressione regolare non ha nulla a che fare con la sintassi reale che la descrive formalmente. Le persone hanno escogitato diversi modi per dire la stessa cosa, quindi diversi stili di sintassi regex.

Tuttavia, scoprirai che in questi giorni ci sono principalmente due gruppi di definizioni:

  1. Espressioni regolari POSIX che specificano Basic (BRE) ed Extended Regular Expressions (ERE). La confusione inizia dove, ad esempio, le espressioni regolari di base usano\( \)per indicare un gruppo e le espressioni regolari estese usano( )per questo.

  2. Espressioni regolari basate sul Perl . Le espressioni regolari del Perl definiscono una sintassi più coerente, dove ad esempio una barra rovesciata sfuggirà sempre a un carattere non alfanumerico. La sintassi della regex del Perl si trova in molti linguaggi di programmazione popolari oggigiorno, da Java a Ruby.

Puoi leggere l' articolo di Wikipedia sulla sintassi della regex per maggiori informazioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.