2014-05-14 10 views
5

Ich lerne reguläre Ausdrücke. Ich habe einige Zweifel in Bezug auf dieses Beispiel:`{n}` Iterations-Metazeichen nach der Posix-Klasse in Regex

Ich möchte alle Dateien mit konventionellen Erweiterungen in Namen finden. Dies funktioniert:

ls | grep '\.[[:lower:]][[:lower:]][[:lower:]]$' 

aber nicht:

ls | grep '\.[[:lower:]]{3}$' 

Soweit ich mit Muster der {n} Iteration Metazeichen Ergebnisse verstanden in passender, die genau {n} Vorkommen von vorhergehenden Charakter hat. Funktioniert es nicht mit POSIX-Klassen? Oder mache ich hier einen dummen Fehler?

Antwort

5

In POSIX basic (BRE), müssen Sie die Klammern entkommen dies funktioniert:

ls | grep '\.[[:lower:]]\{3\}$' 

In POSIX erweitert (ERE), diese Forderung fallen gelassen wurde, und ERE auch fügt schließlich Wechsel (|) zu regulären Ausdrücken (obwohl einige Tools, die BRE verwenden, die Alternierung über \| unterstützen).

+0

Warum brauchen wir doppelte eckige Klammern? – thefourtheye

+0

@thefourtheye Weil so benannte Zeichenklassen in POSIX funktionieren. –

+0

Danke für die Erklärung. –

Verwandte Themen