Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

LIKE_REGEX-Prädikat (Mustervergleich mit regulären Ausdrücken)

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
(caseless)

Wenn dieser Modifikator gesetzt ist, passen Buchstaben im Suchmuster sowohl auf groß als auch auf klein geschriebene Buchstaben.

m
(multiline)

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.
Wenn dieser Modifikator gesetzt ist, passen die Zeilenanfang- und Zeilenende Konstrukte in der Zeichenkette sowohl direkt nach, bzw. vor einem Zeilenumbruch als auch auf deren Anfang und Ende.
Falls die Zeichenkette kein NEWLINE-Zeichen enthält, oder im Suchmuster kein ^ oder $ vorkommt, hat dieser Modifikator keine Wirkung.

s
(dotall)

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.
Unabhängig davon, ob dieser Modifikator gesetzt ist, passt eine verneinende Zeichenklasse wie z.B. [^a] immer auf einen Zeilenumbruch.

x
(extended)

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.

en.e

Treffer z.B.: Ente, Ende, denke

+

Das Pluszeichen steht für ein oder mehrmaliges Vorkommen des davor stehenden

Zeichens.

e+

Treffer z.B. Redner, Seenot, seeeeehr gut

*

Das Sternzeichen steht für kein, ein- oder mehrmaliges Vorkommen des davorstehenden
Zeichens.

se*

Treffer z.B. Sturm, sehr gut, Seenot

?

Das Fragezeichen steht für kein oder einmaliges Vorkommen des davorstehenden
Zeichens.

se?

Treffer z.B. Sturm, sehr gut
aber nicht: Seenot

^

Das Dach- oder Hütchensymbol kann eine Zeichenklasse verneinen oder bei Zeichenketten angeben, dass das nachfolgende
Suchmuster am Anfang des Suchbereichs vorkommen muss.

^Hans

Treffer z.B. Hans Meier, Hans Müller
aber nicht: Meier Hans

^[^äöüÄÖÜ]*$

Treffer z.B. Meier
aber nicht: Müller

$

Das Dollarzeichen gibt bei Zeichenketten an, dass das voranstehende Suchmuster am Ende des Suchbereichs vorkommen muss.

Hans$

Treffer z.B. Meier Hans
aber nicht: Hans Meier

|

Der Senkrechtstrich trennt alternative Ausdrücke.

[M|m]eier

Treffer z.B. Meier, meier
aber nicht: Beier, eier

\

Der Gegenschrägstrich maskiert das nachfolgende (Sonder-)Zeichen.

Schif\?

Treffer bei Schif?
aber nicht: Schiff

[ ]

Eckige Klammern begrenzen eine Zeichenklasse.
.

Me[ijy]er

Treffer z.B. Meier, Mejer, Meyer
aber nicht: Meister

-

Der Bindestrich trennt Bereichsgrenzen einer Zeichenklasse.

Me[a-z]er

Treffer z.B. Meier, Mener, Mezer
aber nicht: Meister

( )

Runde Klammern gruppieren Teilausdrücke.
.

(Herr|Frau) M[a-z]+

Treffer bei Herr Meier, Frau Müller
aber nicht: Freifrau Meier

{ }

Geschweifte Klammern sind eine Wiederholungsangabe für davorstehende Zeichen.

Schif{2,5}

Treffer bei Schiff, Schifffahrt
aber nicht: Schif


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}
{m,}
{m,n}

Wiederholung genau m-mal
Wiederholung mindestens m-mal
Wiederholung mindestens m-mal, jedoch nicht mehr als n-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,
FORM FEED-Zeichen

\S

alle Zeichen außer Leerzeichen, Tabulatorzeichen, NEWLINE-Zeichen, CARRIAGE RETURN-Zeichen,
FORM FEED-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
Treffer, wenn es am Wortanfang bzw. am Wortende steht.

\B

negative Wortgrenze, d.h. bei Angabe von \b... bzw. ...\b führt ein Muster nur dann
zu einem Treffer, wenn es nicht am Wortanfang bzw. am Wortende steht.

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 mit Ber 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.