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"