Mit regulären Ausrücken kann nicht nur nach einem ganz bestimmten Suchbegriff gesucht werden, sondern es sind beliebig komplizierte Suchanfragen möglich. Mit Sonderzeichen können Suchbegriffe zusammengesetzt werden, so dass nicht nur ein einzelner Begriff gefunden wird, sondern genau definierte Kombinationen von Begriffen.
Falls Sie mit Ausdrücken wie '*.txt', z.B. beim Dateimanagement, bereits gearbeitet haben, ist Ihnen das Prinzip der regulären Ausdrücke bereits bekannt. Einzelne Sonderzeichen (wie hier der '*') haben eine spezielle Bedeutung und stehen z.B. für beliebigen Text (der '*' steht bei diesem Beispiel als Platzhalter für einen beliebigen Dateinamen).
Ähnlich verhält es sich mit den hier verwendeten regulären Ausdrücken. So findet beispielsweise 'fi.*?en' beliebige Ausdrücke, die mit 'fi' beginnen und mit 'en' aufhören (z.B. finden, finnen etc...) wobei das '?' angibt, das jeweils die kürzeste Möglichkeit gesucht werden soll.
Nachfolgend finden Sie einige Erläuterungen zu den einzelnen Operatoren und deren Bedeutung.
Ausführliche Erklärungen weiter unten.
Zeichen | Bedeutung |
. | steht für ein beliebiges Zeichen (genau ein) |
| | Oder. Bsp: 'a(b|c)' findet 'ab' oder 'ac' |
* | Wiederholung: Das Zeichen vor "*" kann beliebig oft vorkommen (einschliesslich null mal). Bsp: ba* findet b ba, baa, baaa, usw. |
+ | wie * aber ohne null mal. Bsp: ba* findet ba, baa, baaa, usw. aber nicht b |
? | wie * aber nur einfache Wiederholung. Bsp: ba? findet b, ba
aber nicht baa
folgt es einem '*' oder '+' findet es bei Wiederholungen die kürzest mögliche Zeichenfolge (sonst längste). Bsp: 'f.*?n' findet 'fin' und nicht 'finden' |
(, ) | Klammern zum gruppieren von Ausdrücken |
{, } | Der vor den Klammern stehende Ausdruck wird so oft repetiert wie zwischen den Klammern angegeben, für einen Bereich: {unteres Limit, oberes Limit} Bsp: 'ba{2,4}' findet 'baa', 'baaa' und 'baaaa'. Zwischen den Klammern darf kein Leerzeichen stehen! |
[, ] | Menge von Zeichen. Bsp: '[abc]' steht für 'a', 'b' oder 'c'. '[a-f]' steht für alle Zeichen von 'a' bis und mit 'f'. |
$ | Zeilenumbruch am Ende einer Zeile |
^ | Negation. Bsp: '^a' bedeutet alle Zeichen
ausser 'a'
Zeilenumbruch am Anfang einer Zeile |
\ | Das nachfolgende Zeichen wird als gewöhnlicher Buchstabe
aufgefasst und nicht als Sonderzeichen. Z.B. steht '\.' für einen Punkt
und nicht als '\' gefolgt von einem beliebigen Zeichen.
Das folgende Zeichen ist ein Sonderzeichen. Bsp:'\n' repräsentiert das 'neue Linie' Zeichen |
Wiederholungen von einzelnen Zeichen können durch die Zeichen '*', '+' oder
'?' dargestellt werden. Ein Ausdruck gefolgt von einem '*' kann beliebig oft
wiederholt werden (einschliesslich 0 mal), '+' bedeutet das selbe aber der
Ausdruck muss mindestens einmal vorkommen, während er bei '?' max. einmal
vorkommen darf.
Soll der Ausdruck eine bestimmte Anzahl vorkommen, kann dem Ausdruck die Anzahl
in geschweiften Klammern folgen z.B. '{3}'. '{2,5}' bedeutet, dass der Ausdruck
min. 2 mal aber max. 5 mal vorkommen darf, während '{2,}' nur die untere Grenze
angibt, also min. 2 mal. Zwischen den Klammern darf kein Leerzeichen stehen!
Der zu wiederholende Ausdruck kann ein einzelnes Zeichen, eine Zeichengruppe
oder einen Ausdruck der mit '()' gruppiert wurde.
Bsp:
'ba*' findet 'b', 'ba', 'baa', 'baaa' ...
'ba+' findet 'ba' or 'baa' aber nicht 'b'.
'ba?' findet 'b' or 'ba'.
'ba{2,4}' findet 'baa', 'baaa' und 'baaaa'.
'(ba)*' findet 'ba', baba'... aber nicht 'baa'
Wird hinter '*' oder '+' ein '?' angehängt, wird die jeweils kürzeste Möglichkeit gefunden, ansonsten die längste.
Bsp:
'f.*?n' findet 'fin' und nicht 'finden'
'f.*n' findet 'finden' und nicht 'fin' (sofern nicht noch später ein 'n' folgt)
Mit runden Klammern können Ausdrücke gruppiert werden.
Bsp:
'(ba)*' findet 'ba', baba'... aber nicht 'baa'
Mit dem Oder Operator '|' können alternativ verschiedene Ausdrücke gefunden werden.
Bsp:
'a(b|c)' findet 'ab' oder 'ac'
'abc|def' findet 'abc' oder 'def'
Mit den Eckigen Klammern '[' und ']' können Zeichen zu einer Menge zusammengefasst werden. Mit '^' können die Mengen negiert werden.
Bsp:
'[abc]' findet 'a', 'b' oder 'c'
'[^abc]' findet jedes Zeichen ausser 'a', 'b' oder 'c'
'[a-z]' findet jedes Zeichen von 'a' bis und mit 'z'
Spezielle Zeichen(mengen) können mit Klassen definiert werden. Klassen werden mit '[:klassenname]' definiert innerhalb einer Mengendeklaration.
Bsp:
'[[:digit]]' ist die Menge aller Ziffern (0-9)
Klassenname | Bedeutung | Abkürzung (Alternative) |
alnum | Ein beliebiges alphanumerisches Zeichen | |
alpha | Ein Buchstabe a-z oder A-Z. Je nach Zeichensatz können auch noch andere Buchstaben vorkommen | |
blank | unsichtbare Zeichen wie Leerzeichen oder Tabulatoren | |
cntrl | Kontrollzeichen | |
digit | Ziffern von 0 bis 9 | \d |
graph | grafisches Zeichen | |
lower | Kleinbuchstaben a-z. Je nach Zeichensatz können auch noch andere Buchstaben vorkommen | \l |
druckbare Zeichen | ||
punct | Punktierung | |
space | Leerzeichen ?? | \s |
upper | Grossbuchstaben A-Z. Je nach Zeichensatz können auch noch andere Buchstaben vorkommen | \u |
xdigit | Hexadezimale Ziffer, 0-9, a-f und A-F. | |
word | Wort - alphanumerische Zeichen plus Unterstrich '_'. | \w \W entspricht '[^[:word:]]' |
Die Zeichen können auch durch ihren numerischen Kode repräsentiert werden, indem dem Schrägstrich '\' der Kode des Zeichens folgt. Hexadezimale Kodes können repräsentiert werden durch '\x' gefolgt vom Kode in Hex.
Bsp:
'\023' repräsentiert das Zeichen mit dem Kode 23.
'\xf0' repräsentiert das Zeichen mit dem Hex Kode f0.
Um Kode von folgenden Zeichen zu trennen können Klammern benutzt werden.
Bsp:
'\0105' repräsentiert das Zeichen mit Kode 105
'(\010)5' repräsentiert das Zeichen mit dem Kode 10 gefolgt von einer '5'
Escape Sequenz | Zeichen Kode | Bedeutung |
\a | 0x07 | Glocke. |
\f | 0x0C | Form feed. |
\n | 0x0A | Neue Zeile. |
\r | 0x0D | Wagenrücklauf. |
\t | 0x09 | Tabulator. |
\v | 0x0B | Vertikaler Tabulator. |
\e | 0x1B | ASCII Escape Zeichen. |
\0dd | 0dd | Oktaler Zeichenkode, wobei dd eine oder mehrere oktale Ziffern ist. |
\xXX | 0xXX | Hexadezimaler Zeichenkode, wobei XX eine oder mehrere hexadezimale Ziffern ist. |
\x{XX} | 0xXX | Hexadezimaler Zeichenkode, wobei XX eine oder mehrere hexadezimale Ziffern ist (unicode) |
Weitere Zeichen (für Kompatibilität zu Perl)
Zeichen | dasselbe wie |
\w | [[:word:]] |
\W | [^[:word:]] |
\s | [[:space:]] |
\S | [^[:space:]] |
\d | [[:digit:]] |
\D | [^[:digit:]] |
\l | [[:lower:]] |
\L | [^[:lower:]] |
\u | [[:upper:]] |
\U | [^[:upper:]] |
\C | . |
\Q, \E | Alle dem '\Q' folgenden Zeichen werden als normale Zeichen interpretiert bis zu '\E' |
Übersetzt und modifiziert aus: Dokumentation zu Boost::regex lib, (c) Dr John Maddock
Die original Dokumentation (etwas ausführlicher) kann hier gefunden werden: http://www.boost.org/libs/regex/syntax.htm (englisch)