Reguläre Ausdrücke

Die Suchfunktion in der grafischen Benutzeroberfläche und in der Konsole erlauben die Verwendung von regulären Ausdrücken als Suchtext. Diese Anleitung beschreibt, wie die regulären Ausdrücke aufgebaut werden. Diese Ausdrücke werden intern von der Klasse QRegExp des Qt Framework verarbeitet. Die Dokumentation der Klasse ist unter folgender Adresse verfügbar: http://doc.qt.nokia.com/qt-maemo-4.6/qregexp.html. Sie enthält einige zusätzliche Erklärungen, wie zum Beispiel Hinweise für Perl Entwickler.

Reguläre Ausdrücke erstellen

Reguläre Ausdrücke bestehen aus Zeichen, Mengen von Zeichen (z.B. A-Z), Mengenangaben, Platzhaltern und Ersetzungszeichen. Wenn sie richtig kombiniert werden, formen diese Elemente Muster, die auf Wörter oder Texte zutreffen. Um diesen Text auch als eine Referenz nutzen zu können, ist er listenartig aufgebaut.
Zeichen
Jedes Zeichen repräsentiert sich selbst, es sei denn es ist Teil eines der folgenden Konstrukte.

Zeichenmengen
Zeichenmengen werden von eckigen Klammern ("[]") eingeschlossen und können Bereiche mit einem Bindestrich definieren. Die Menge kann mit einem ^ negiert werden, wodurch sie auf alle Zeichen zutrifft, die nicht in ihr enthalten sind.
 
Beispiele:
  • [abc] trifft: "a", "b", oder "c".
  • [A-Z] trifft: Alle Großbuchstaben des lateinischen Alphabet.
  • [^a-d] trifft: Alle Buchstaben, ausser "a","b","c","d".

Mengenangaben
Mengenangaben werden definiert mit geschweiften Klammern: "{}". Sie können aus einem oder zwei Werten bestehen: {x}, {x,y}. Wenn ein Wert angeben wird, definiert die Menge eine genaue Anzahl. Zwei Werte geben einen Mindest- und eine Höchstanzahl an: {<min>,<max>}. Einer der beiden Werte kann weggelassen werden, wodurch die Grenze offen bleibt.
 
Beispiele:
  • A{3} trifft: "AAA", nichts anderes.
  • A{1,3} trifft: "A", "AA", "AAA", aber nicht "AAAA".
  • [0-9]{1,1} trifft: "0","1",...,"9", aber nicht "13".
  • A{,3} trifft: " ", "A", "AA", "AAA", aber nicht "AAAA",....
  • A{3,} trifft: "AAA", "AAAA",..., aber nicht "AA", "A", " ".
    Es gibt zusätzlich einige Sonderzeichen für häufig verwendete Mengen:
  •  ?     trifft Null bis Eins (ist wie {0,1}) 
  •  +     trifft Eins bis beliebig viele (ist wie {1,}) 
  •  *     trifft Null bis beliebig viele (ist wie {0,}) 

Wildcards
Wildcards werden verwendet um anzugeben, dass an ihrer Stelle ein oder mehrere beliebige Zeichen stehen können. "." wird verwendet, um genau ein beliebiges Zeichen zuzulassen. ".*" Steht für beliebig viele beliebige Zeichen.

Wortgrenzen
Wenn keine Wortgrenzen angegeben werden, treffen Muster auf jedes Wort zu, welches das Muster beinhaltet. Sie werden mit dem Zeichen \b angegeben. Es ist auch möglich Wortgrenzen auszuschließen mit \B.
 
Beispiele:
  • code trifft: "Unicode ist gut." und "Spaghetti code ist nicht gut."
  • \bcode\b trifft: "Spaghetti code ist nicht gut.", aber nicht "Unicode ist gut.".
  • \Bcode\B trifft: "Unicode ist gut.", aber nicht "Spaghetti code ist nicht gut.".

Textgrenzen
Wenn nicht anders angegeben, kann das Muster in einem Text auftreten und wird als Treffer gewertet. Wenn das Muster nur auf exakte Texte zutreffen soll, muss es mit ^ und $ umschlossen werden. ^ gibt den Textanfang, $ das Ende des Textes an.
 
Beispiel:
  • ^code$ trifft: "code", aber nicht "Spaghetti code ist nicht gut.".

Kombinationen
Es ist möglich mehrere Muster in einem regulären Ausdruck zusammenzufassen. Hierzu wird der gesamte Ausdruck geklammert ("()") und die Teilausdrücke mit Balken ("|") verbunden, was eine "Oder" Verknüpfung darstellt.
 
Beispiel:
  • \b(Fahrrad|fahren)\b trifft "Fahrrad" und "fahren", aber nicht "Fahrradfahren".

Ersetzungszeichen
Es können einige Ersetzungszeichen verwendet werden, die zum Beispiel für Zeichen, Leerzeichen oder Zahlen stehen. Um ein Zeichen zu verwenden, welches eine spezielle Bedeutung hat, verwenden Sie einen umgekehrten Schrägstrich ("\") um die Bedeutung aufzuheben: \^ (\\ repräsentiert den Rückstrich selbst). Es folgt eine kurze Auflistung über die Ersetzungszeichen, die in der Anwendung sinnvoll eingesetzt werden können:
  • \a         ASCII Glocke
  • \f         Seitenumbruch
  • \r         Zeilenumbruch
  • \t         Tabulator
  • \d         Ziffer
  • \D         Nicht-Ziffer
  • \s         Leerzeichen
  • \S         Nicht-Leerzeichen
  • \w         Buchstabe(a,b,...)
  • \W         Nicht-Buchstabe

Aussagen
Aussagen ermöglichen es festzulegen, wie der auf das Muster folgende Text aufgebaut sein soll. Es wird unterschieden zwischen positivem und negativem Vorgriff. Ein positiver Vorgriff muss zutreffen, damit das Muster trifft. Er wird definiert mit (?=). Ein negativer Vorgriff darf nicht zutreffen, damit das Muster trifft. Dieser wird definiert mit (?!).
 
Beispiele:
  • Spaghetti(?=\s+code) trifft: "Spaghetti code", aber nicht "Spaghetti alla bolognese"
  • Spaghetti(?!\s+code) trifft: "Spaghetti alla bolognese", aber nicht "Spaghetti code"