Reguläre Ausdrücke 4: Das Fragezeichen
Regel 2
Der Ausdruck vor einem ?
kann kein- oder einmal vorkommen.
Im Klartext heißt das: Das Zeichen oder der Ausdruck, welcher vor dem Fragezeichen stehen, kann vorkommen, muss aber nicht. Das heißt aber auch, dass der Ausdruck wirklich nur maximal einmal auftauchen darf. Sollte der Ausdruck mehrmals nacheinander vorkommen, so wird dies nicht „gematcht“.
Hierzu ein kurzes Beispiel:
[martin@partners3 martin]$ cat datei traumschiff raumschiff aumschiff [martin@partners3 martin]$ grep "traumschiff" datei traumschiff [martin@partners3 martin]$ grep "raumschiff" datei traumschiff raumschiff [martin@partners3 martin]$ egrep "t?raumschiff" datei traumschiff raumschiff [martin@partners3 martin]$ |
Zwei Dinge sind hier anzumerken. Erstens wird für „normale“, also keine universellen Ausdrücke, grep
verwendet, während egrep
für reguläre Ausdrücke benutzt werden kann. egrep
ist dabei das gleiche wie grep
mit dem Schalter -E
welcher für extended-regexp (dt. erweiterter regulärer Ausdruck) steht. Zweitens gibt es einen Unterschied zwischen einem grep
nach raumschiff
und einem egrep
nach t?raumschiff
obwohl das Programm das gleiche Resultat zeigt. Sucht man nach raumschiff
, wird logischerweise auch traumschiff
ausgegeben, da letztgenannteres die erste Zeichenkette enthält. Das Programm weiss also gar nichts vom t
vor dem raumschiff
. In dem egrep
-Kommando ist dem Programm sehr wohl bewusst, dass ein t
vor raumschiff
existiert.
Dies zeigt wie genau man reguläre Ausdrücke formulieren muss, denn sie können wochenlang funktionieren und plötzlich findet man einen Fehler und gar nichts geht mehr – der Alptraum eines jeden Systemadministrators.
Das Fragezeichen ist hier kein regulärer Ausdruck, sondern ein Dateinamenmuster.