Dlaczego istnieje tak wiele wariantów wyrażeń regularnych? [Zamknięte]

14

Dzisiaj, kiedy przejrzałem kod źródłowy naszego projektu, zauważyłem, że na końcu każdego wiersza znajduje się wiele niepotrzebnych „spacji” i „tabulatorów”. Postanowiłem więc usunąć je z wyrażeniem regularnym.

Stwierdziłem jednak, że polecenie sed -i '/\s+$/d'nie działa. Dopóki nie zmieniłem polecenia na see -ri '/\s+$/d', działało to zgodnie z moimi oczekiwaniami. W instrukcji sednapisano, że -rwywołuje rozszerzone wyrażenie regularne.

Jestem zdezorientowany, dlaczego jest tyle wariantów wyrażeń regularnych? Jak vim / emacs / perl / sed regexp. Dlaczego regexp nie może zaoferować unikalnego interfejsu użytkownika?

hero2008
źródło

Odpowiedzi:

19

Z przyczyn historycznych. Nie ma jednej definicji składni „Wyrażenie regularne”. Samo pojęcie wyrażenia regularnego nie ma nic wspólnego z faktyczną składnią, która go formalnie opisuje. Ludzie wymyślili różne sposoby mówienia tego samego, stąd różne style składni wyrażeń regularnych.

Przekonasz się jednak, że w dzisiejszych czasach istnieją głównie dwie grupy definicji:

  1. Wyrażenia regularne POSIX, które określają podstawowe (BRE) i rozszerzone wyrażenia regularne (ERE). Zamieszanie zaczyna się tam, gdzie na przykład używane są Podstawowe Wyrażenia Regularne\( \)do oznaczenia grupy, a Rozszerzone Wyrażenia Regularne używają( )do tego celu.

  2. Wyrażenia regularne oparte na Perlu . Wyrażenia regularne Perla definiują bardziej spójną składnię, w której na przykład odwrotny ukośnik zawsze ucieka przed znakiem innym niż alfanumeryczny. Składnia wyrażeń regularnych Perla znajduje się obecnie w wielu popularnych językach programowania, od Java po Ruby.

Więcej informacji można znaleźć w artykule w Wikipedii na temat składni wyrażeń regularnych .

slhck
źródło