Es wird geprüft, ob ein alphanumerischer Wert zu einem angegebenen regulären Ausdruck passt. Reguläre Ausdrücke sind genau definierte Suchmuster, die weit über die Möglichkeiten der Suchmuster im LIKE-Prädikat hinaus gehen. Reguläre Ausdrücke sind ein mächtiges Mittel, um große Datenbestände nach komplexen Suchausdrücken zu durchsuchen. Sie werden seit langem z.B. in der Programmiersprache Perl eingesetzt.
operand [NOT] LIKE_REGEX
regulärer_ausdruck [FLAG
modifikatoren ]
operand ::=
ausdruck
regulärer_ausdruck ::=
ausdruck
modifikatoren ::=
ausdruck
operand
Alphanumerischer Ausdruck, der den Operanden für den Vergleich mit dem regulären Ausdruck darstellt.
Der Wert von operand darf kein multipler Wert mit Dimension > 1 sein.
regulärer_ausdruck
Alphanumerischer Ausdruck, dessen Wert ein regulärer Ausdruck ist, zu dem der Wert von operand passen soll. Zum Aufbau reguläre Ausdrücke siehe "LIKE_REGEX-Prädikat (Mustervergleich mit regulären Ausdrücken)". Modifikatoren für regulärer_ausdruck geben Sie in der FLAG-Klausel an.
Der Wert von regulärer_ausdruck darf kein multipler Wert mit Dimension > 1 sein.
FLAG-Klausel
Alphanumerischer Ausdruck der Modifikatoren für regulärer_ausdruck. Folgende Modifikatoren können Sie angeben:
modifikatoren | Bedeutung |
i | Wenn dieser Modifikator gesetzt ist, passen Buchstaben im Suchmuster sowohl auf groß als auch auf klein geschriebene Buchstaben. |
m | Standardmäßig behandelt SESAM/SQL eine zu durchsuchende Zeichenkette wie eine einzige Zeile von Zeichen, auch wenn sie tatsächlich mehrere Zeilenumbrüche (NEWLINE-Zeichen, siehe "CSV() - BS2000-Datei als Tabelle lesen") enthält. Das Metazeichen für einen Zeilenanfang (^) passt nur auf den Anfang der Zeichenkette, das Metazeichen für ein Zeilenende ($) nur auf das Ende der Zeichenkette. |
s | Wenn dieser Modifikator gesetzt ist, passt das Metazeichen Punkt im Suchmuster auf alle Zeichen inklusive Zeilenumbrüche (NEWLINE-Zeichen, siehe "CSV() - BS2000-Datei als Tabelle lesen"). Ohne diesen Modifikator sind Zeilenumbrüche ausgeschlossen. |
x | Wenn dieser Modifikator gesetzt ist, werden Leerzeichen im Suchmuster ignoriert, sofern sie nicht maskiert sind oder sich innerhalb einer Zeichenklasse befinden. Außerdem werden Zeichen, die außerhalb einer Zeichenklasse zwischen nicht maskierten # stehen, einschließlich dem nächsten Zeilenumbruch ignoriert. Dies bietet die Möglichkeit, Kommentare in komplizierte Suchmuster einzufügen. Beachten Sie aber, dass dies nur für Datenzeichen gilt. Leerräume dürfen niemals innerhalb einer Folge spezieller Zeichen auftreten, zum Beispiel in der Folge (?(, die einen bedingten Teilausdruck einleitet. |
modifikatoren muss aus Kleinbuchstaben bestehen. Jedes Zeichen kann mehrmals angegeben werden. Es dürfen keine Leerzeichen angegeben werden.
FLAG-Klausel nicht angegeben:
Es sind keine Modifikatoren für regulärer_ausdruck definiert.
Ergebnis
Unbestimmt, wenn der Wert von operand, regulärer_ausdruck oder modifikatoren der NULL-Wert ist, sonst:
Ohne NOT:
Wahr, wenn die Platzhalter für Zeichen und Zeichenfolgen in regulärer_ausdruck jeweils durch Zeichen und Zeichenfolgen ersetzt werden können, sodass der entstehende Wert gleich dem Wert von operand ist und die gleiche Länge hat.
Falsch, sonst.
Mit NOT:
Wahr, wenn die Platzhalter für Zeichen und Zeichenfolgen in regulärer_ausdruck nicht jeweils durch Zeichen und Zeichenfolgen ersetzt werden können, sodass der entstehende Wert gleich dem Wert von operand ist und die gleiche Länge hat.
Falsch, sonst.
Beispiele
Aus der Tabelle KONTAKT alle Kontaktpersonen heraussuchen, deren Nachname die Zeichenfolge meier „oder so ähnlich“ enthält:
SELECT vorname, nachname FROM kontakt WHERE nachname LIKE_REGEX '[a-z]* M [ae]? [iy] [a-z]* r' FLAG 'ix' vorname nachname Albert Gansmeier Berta Hintermayr Thea Mayerer Herbert Meier Anton Kusmir
In der Tabelle KONTAKT die nicht korrekten Postleitzahlen der Spalte PLZ herausfinden:
SELECT * FROM kontakt WHERE plz NOT LIKE_REGEX '\d{5}'
Aus der Tabelle KONTAKT alle E-Mail-Kontakte zu Fujitsu heraussuchen:
SELECT address FROM kontakt WHERE address LIKE_REGEX '([A-Za-z])+\.([A-Za-z]+)@fujitsu\.com' address Albert.Gansmeier@fujitsu.com Berta.Hintermayr@fujitsu.com Thea.Mayerer@fujitsu.com
Reguläre Ausdrücke in SESAM/SQL
Die regulären Ausdrücke im LIKE_REGEX-Prädikat entsprechen den regulären Ausdrücken der Programmiersprache Perl mit folgenden Ausnahmen:
sie werden nicht in Begrenzer eingeschlossen
es gibt keine „Ersetzen“-Funktion
die Modifikatoren werden in der FLAG-Klausel angegeben
Sonderzeichen
Sonderzeichen in regulären Ausdrücken haben spezielle Funktionen:
Zeichen | Bedeutung | Beispiel |
. | Der Punkt steht für ein beliebiges Zeichen ungleich Punkt. |
Treffer z.B.: Ente, Ende, denke |
+ | Das Pluszeichen steht für ein oder mehrmaliges Vorkommen des davor stehenden Zeichens. |
Treffer z.B. Redner, Seenot, seeeeehr gut |
* | Das Sternzeichen steht für kein, ein- oder mehrmaliges Vorkommen des davorstehenden |
Treffer z.B. Sturm, sehr gut, Seenot |
? | Das Fragezeichen steht für kein oder einmaliges Vorkommen des davorstehenden |
Treffer z.B. Sturm, sehr gut |
^ | Das Dach- oder Hütchensymbol kann eine Zeichenklasse verneinen oder bei Zeichenketten angeben, dass das nachfolgende |
Treffer z.B. Hans Meier, Hans Müller
Treffer z.B. Meier |
$ | Das Dollarzeichen gibt bei Zeichenketten an, dass das voranstehende Suchmuster am Ende des Suchbereichs vorkommen muss. |
Treffer z.B. Meier Hans |
| | Der Senkrechtstrich trennt alternative Ausdrücke. |
Treffer z.B. Meier, meier |
\ | Der Gegenschrägstrich maskiert das nachfolgende (Sonder-)Zeichen. |
Treffer bei Schif? |
[ ] | Eckige Klammern begrenzen eine Zeichenklasse. |
Treffer z.B. Meier, Mejer, Meyer |
- | Der Bindestrich trennt Bereichsgrenzen einer Zeichenklasse. |
Treffer z.B. Meier, Mener, Mezer |
( ) | Runde Klammern gruppieren Teilausdrücke. |
Treffer bei Herr Meier, Frau Müller |
{ } | Geschweifte Klammern sind eine Wiederholungsangabe für davorstehende Zeichen. |
Treffer bei Schiff, Schifffahrt |
Zeichenwiederholungen
Einfache Zeichenwiederholungen prüfen Sie mit den Sonderzeichen +
, *
oder ?
, siehe vorangehende Tabelle.
Mehrfache Zeichenwiederholungen können Sie auch mit der geschweiften Klammer prüfen: {m,n}. Dabei gibt m die Mindestzahl, n die Maximalzehl der Wiederholungen an.
Folgende Angaben sind erlaubt:
{m} | Wiederholung genau m-mal |
f{1,3}
liefert z.B. Treffer bei Schilf, Schiff und Schifffahrt.
Gruppierungen
Gruppierungen werden durch runde Klammern gebildet. Das nachfolgende Wiederholungszeichen bezieht sich dann auf den gesamten geklammerten Ausdruck.
h(al)+lo
liefert z.B. Treffer bei hallo, halallo, halalallo.
Auswahl von Zeichen
Eine Liste von Zeichen in eckigen Klammern bietet eine Auswahl von Zeichen an, auf die der reguläre Ausdruck passen kann. Der Ausdruck in eckigen Klammern steht nur für ein Zeichen aus der Liste.
Me[ijy]er
liefert z.B. Treffer bei Meier, Mejerer, Hintermeyer, nicht aber bei Mayer.
Um eine Auswahl aus einem Ziffernbereich oder einem Bereich des Alphabets treffen verwenden Sie den Bindestrich „-“.
[A-Z][a-z]+[0-9]{2}
liefert Treffer bei Wörtern, die mit einem Großbuchstaben beginnen, gefolgt von einem oder mehreren Kleinbuchstaben und abgeschlossen mit genau zwei Ziffern, z.B. Meierlein15, Huber01, nicht aber bei meier15, Huber1.
Alternativen
Mit dem Senkrechtstrich „|“ können Sie in einem regulären Ausdruck mehrere alternative Zeichenketten angeben, auf die eine Zeichenkette untersucht werden soll.
([H|h]err|[F|f]rau] M[a-z]*
liefert Treffer bei allen Anreden von Personen, deren Name mit M beginnt, z.B. Herr Meier, Freifrau Müller.
Maskieren von Sonderzeichen
Sonderzeichen müssen Sie maskieren, wenn Sie nicht die Sonderbedeutung des Zeichens meinen, sondern seine literale, normale Bedeutung, also einen Senkrechtstrich als Senkrechtstrich oder einen Punkt als Punkt meinen. Das Maskierungszeichen ist in allen Fällen der Gegenschrägstrich „\“.
([A-Z]|[a-z])+\.([A-Z]|[a-z])+@fujitsu\.com
liefert Treffer bei allen E-Mail-Adressen der Form: vorname.nachname@fujitsu.com
.
[A-Z]+\.[a-z]+@fujitsu\.com
liefert das gleiche Ergebnis, wenn sie in der Flag-Klausel 'i'
angeben, also Groß- und Kleinschreibung ignorieren möchten.
Operatoren
Buchstaben, denen ein Gegenschrägstrich „\“ vorangestellt wird, kennzeichnen Sonderzeichen oder bestimmte Zeichenklassen:
\n | eines der NEWLINE-Zeichen, siehe "CSV() - BS2000-Datei als Tabelle lesen" |
\t | Tabulatorzeichen |
\f | FORM FEED-Zeichen |
\r | CARRIAGE RETURN-Zeichen |
\s | Leerzeichen, Tabulatorzeichen, NEWLINE-Zeichen, CARRIAGE RETURN-Zeichen, |
\S | alle Zeichen außer Leerzeichen, Tabulatorzeichen, NEWLINE-Zeichen, CARRIAGE RETURN-Zeichen, |
\d | eine Ziffer |
\D | ein beliebiges Zeichen, das keine Ziffer ist |
\w | ein Wortzeichen, also A bis Z, a bis z und der Unterstrich „_“ |
\W | ein beliebiges Zeichen, das kein Wortzeichen ist |
\A | Anfang einer Zeichenkette |
\Z | Ende einer Zeichenkette |
\b | Wortgrenze, d.h. bei Angabe von \b... bzw. ...\b führt ein Muster nur dann zu einem |
\B | negative Wortgrenze, d.h. bei Angabe von \b... bzw. ...\b führt ein Muster nur dann |
Z.B. liefert \d{3,4}
Treffer bei allen 3- oder 4-stelligen Ziffern und
\w{5}
liefert Treffer bei allen 5-stelligen Wörtern
Rangfolge in regulären Ausdrücken
Die Sonderzeichen innerhalb von regulären Ausdrücken werden nach einer bestimmten Rangfolge bewertet.
1. Rangstufe: ( )
(Klammerung)
2. Rangstufe: + * ? {m,n}
(Wiederholungsoperatoren)
3. Rangstufe: abc ^ $ \b \B
(Zeichen/Zeichenketten, Zeilenanfang/-ende, Wortanfang/-ende)
4. Rangstufe: |
(Alternativen)
Dadurch kann jeder reguläre Ausdruck eindeutig bewertet werden. Wenn Sie in einem Ausdruck jedoch anders bewerten möchten, als es nach der Rangfolge geschieht, können Sie innerhalb des Ausdrucks Klammern setzen, um eine andere Bewertung zu erzwingen.
Z.B. liefert a|bc|d
Treffer bei 'a' oder 'bc' oder 'd'.
(a|b)(c|d)
liefert Treffer bei 'ac' oder 'ad' oder 'bc' oder 'bd'.
Hinweise
Führende oder nachfolgende Leerzeichen müssen evtl. mit
\s*
im Muster berücksichtigt werden. Inbesondere bei Angabe von$
(Ende des Suchbereichs) werden sonst mögliche Treffer nicht erkannt.Beispiel
Beim Datentyp CHAR(n) wird z.B die Zeichenfolge Bertabbbb (b repräsentiert ein Leerzeichen) mit dem Muster
B.*ta$
nicht erkannt, da noch Blanks folgen.Beim Prädikat LIKE bedeutet ein Muster
Ber%
dass ein Trefferwert auch wirklich mitBer
beginnt, während das gleiche Muster beim Prädikat LIKE REGEX auch an beliegbiger Stelle im Satz beginnen darf. Mit dem Muster^Ber.*
wird erreicht, dass das Muster am Satzanfang steht.