Reguläre Ausdrücke werden mit den Suchbedingungen SIMILAR TO und REGEXP sowie mit der Funktion REGEXP_SUBSTR unterstützt. Für SIMILAR TO stimmt die Syntax für reguläre Ausdrücke mit dem ANSI/ISO SQL-Standard überein. Für REGEXP und REGEXP_SUBSTR stimmen die Syntax und die Unterstützung mit Perl 5 überein.
Reguläre Ausdrücke werden von REGEXP und SIMILAR TO verwendet, um eine Zeichenfolge zu suchen, während reguläre Ausdrücke von REGEXP_SUBSTR verwendet werden, um eine Teilzeichenfolge zu suchen. Um das Teilzeichenfolgenverhalten für REGEXP und SIMILAR TO zu erreichen, können Sie auf beiden Seiten des gesuchten
Musters Wildcard-Zeichen (Platzhalter) einfügen. Beispiel: REGEXP '.*car.*'
findet car, carwash und vicar. Sie können Ihre Abfrage auch so schreiben, dass sie die Funktion REGEXP_SUBSTR verwendet.
Die Suche mit regulären Ausdrücken in SIMILAR TO unterscheidet nicht zwischen Groß- und Kleinschreibung. REGEXP und REGEXP_SUBSTR werden durch die Berücksichtigung von Groß- und Kleinschreibung oder von Akzenten in der Datenbank nicht beeinflusst.
Metazeichen sind Symbole oder Zeichen, die in einem regulären Ausdruck eine besondere Bedeutung haben.
Die Verarbeitung von Metazeichen kann unterschiedlich sein:
Je nachdem, ob der reguläre Ausdruck mit den Suchbedingungen SIMILAR TO oder REGEXP bzw. der Funktion REGEXP_SUBSTR verwendet wird.
Abhängig davon, ob das Metazeichen sich in einer Zeichenklasse des regulären Ausdrucks befindet.
Bevor Sie fortfahren, sollten Sie sich die Definition einer Zeichenklasse vergegenwärtigen. Eine Zeichenklasse ist eine Zeichenmenge in eckigen Klammern, mit denen eine Übereinstimmung in einer Zeichenfolge
gesucht wird. In der Syntax SIMILAR TO 'ab[1-9]'
ist [1-9] beispielsweise eine Zeichenklasse und passt zu einer Ziffer im Bereich 1 bis 9. Die Verarbeitung von Metazeichen
in einem regulären Ausdruck kann verschieden sein, je nachdem, ob das Metazeichen in einer Zeichenklasse enthalten ist oder
nicht. Insbesondere werden die meisten Metazeichen als reguläre Zeichen behandelt, wenn sie in einer Zeichenklasse enthalten
sind.
Nur bei SIMILAR TO müssen die Metazeichen *, ?, +, _, |, (, ), { in einer Zeichenklasse mit einem Escapezeichen versehen sein.
Um ein literales Minuszeichen (-), ein Einschaltungszeichen (^) oder eine rechte eckige Klammer (]) in eine Zeichenklasse einzubeziehen, müssen Sie davor ein Escapezeichen setzen.
Eine Liste der unterstützten Metazeichen für reguläre Ausdrücke finden Sie nachstehend. Fast alle Metazeichen werden von SIMILAR TO, REGEXP und REGEXP_SUBSTR auf identische Weise behandelt:
Zeichen | Zusätzliche Informationen |
---|---|
[ und ] |
Geöffnete und geschlossene eckige Klammern werden benutzt um eine Zeichenklasse anzugeben. Eine Zeichenklasse ist eine Teilmenge von Zeichen, die als Suchmuster dient. Mit Ausnahme des Bindestrichs (-) und des Einschaltungszeichens (^) haben Metazeichen und Quantifizierer (wie * und {m}), die in einer Zeichenklasse angegeben werden, keine besondere Bedeutung und werden als normale Zeichen behandelt. SQL Anywhere unterstützt auch Teilzeichenklassen wie die POSIX-Zeichenklassen. |
* | Das Sternchen kann benutzt werden, um in einem Suchmuster ein Zeichen 0 oder mehr Mal darzustellen. Beispiel: REGEXP '.*abc' sucht eine Zeichenfolge, die mit abc endet und mit einem beliebigen Präfix beginnt. Daher werden aabc, xyzabc und abc gefunden,
nicht aber bc und abcc.
|
? | Das Fragezeichen kann benutzt werden, um in einem Suchmuster ein Zeichen 0 oder 1 Mal darzustellen. Beispiel: 'colou?r' findet color und colour.
|
+ | Das Pluszeichen kann benutzt werden, um in einem Suchmuster ein Zeichen 1 oder mehr Mal darzustellen. Beispiel: 'bre+' findet bre und bree, aber nicht br.
|
- |
Ein Bindestrich kann in einer Zeichenklasse benutzt werden, um einen Bereich darzustellen. Beispiel: |
% |
Das Prozentzeichen kann mit SIMILAR TO verwendet werden, um eine beliebige Anzahl von Zeichen darzustellen. Das Prozentzeichen wird für REGEXP und REGEXP_SUBSTR nicht als Metazeichen interpretiert. Wenn es angegeben wird, findet es ein Prozentzeichen (%). |
_ (Unterstrich) |
Der Unterstrich kann mit SIMILAR TO verwendet werden, um ein einzelnes Zeichen zu finden. Der Unterstrich wird für REGEXP und REGEXP_SUBSTR nicht als Metazeichen interpretiert. Wenn er angegeben wird, findet er einen Unterstrich (_). |
| | Der Senkrechtstrich wird verwendet, um alternative Suchmuster anzugeben. In einer Zeichenfolge von Suchmustern, die durch einen Senkrechtstrich getrennt sind, wird der Senkrechtstrich als OR interpretiert und die Suche hält beim ersten Treffer beginnend beim äußerst linken Suchmuster an. Daher müssen Sie die Muster in absteigender Prioritätsreihenfolge eingeben. Sie können eine unbegrenzte Anzahl alternativer Suchmuster eingeben. |
( und ) | Geöffnete und geschlossene runde Klammern sind Metazeichen, wenn sie zum Gruppieren von Teilen eines regulären Ausdrucks verwendet
werden. Beispiel: (ab)* findet null oder mehr Wiederholungen von ab. Wie bei mathematischen Ausdrücken können Sie die Gruppierung verwenden, um die
Reihenfolge zu bestimmen, in der die Teile eines regulären Ausdrucks ausgewertet werden.
|
{ und } |
Geöffnete und geschlossene geschweifte Klammern sind Metazeichen, wenn Sie zur Angabe von Quantifizierern verwendet werden. Quantifizierer geben an, wie oft sich ein Suchmuster wiederholen muss, um ein Treffer zu sein. Beispiel:
|
\ | Der Backslash wird als Escapezeichen für Metazeichen benutzt. Er kann auch als Escapezeichen für Zeichen benutzt werden, die keine Metazeichen sind. |
^ |
Wenn sich bei REGEXP und REGEXP_SUBSTR ein Einschaltungszeichen außerhalb einer Zeichenklasse befindet, findet das Einschaltungszeichen
den Beginn einer Zeichenfolge. Beispiel: Wenn es innerhalb einer Zeichenklasse verwendet wird, gilt das nachstehende Verhalten:
|
$ |
Wenn das Dollarzeichen mit REGEXP und REGEXP_SUBSTR verwendet wird, findet es das Ende einer Zeichenfolge. Beispiel: |
. |
Wenn das Punktzeichen mit REGEXP und REGEXP_SUBSTR verwendet wird, findet es jedes einzelne Zeichen. Beispiel: Wenn es mit SIMILAR TO verwendet wird, findet es einen Punkt (.). |
: |
Der Doppelpunkt wird in einer Zeichenklasse verwendet, um eine Teilzeichenklasse zu finden. Beispiel: |
Teilzeichenklassen sind spezielle Zeichenklassen, die in eine größere Zeichenklasse eingebettet sind. Zusätzlich zu benutzerdefinierten Zeichenklassen,
bei denen Sie die Zeichenmenge definieren, mit denen eine Übereinstimmung gesucht wird (z.B. beschränkt [abxq4]
die Menge der übereinstimmenden Zeichen auf a, b, x, q und 4), unterstützt SQL Anywhere auch Teilzeichenklassen wie etwa
die meisten POSIX-Zeichenklassen. Beispiel: [[:alpha:]]
stellt die Menge aller Groß- und Kleinbuchstaben dar.
Die Suchbedingung REGEXP und die Funktion REGEXP_SUBSTR unterstützen alle Syntaxkonventionen in der nachstehenden Tabelle, die Suchbedingung SIMILAR TO hingegen nicht. Konventionen, die von SIMILAR TO unterstützt werden, sind durch ein "J" in der Spalte SIMILAR TO gekennzeichnet.
In REGEXP und bei der Verwendung der REGEXP_SUBSTR-Funktion können Teilzeichenklassen mit einem Einschaltungszeichen negiert
werden. Beispiel: [[:^alpha:]]
findet die Menge aller Zeichen mit Ausnahme der Buchstaben.
Teilzeichenklasse | Zusätzliche Informationen | SIMILAR TO | ||
---|---|---|---|---|
[:alpha:] |
Findet Buchstabenzeichen in Groß- und Kleinschreibung in der aktuellen Kollatierung. Beispiel: |
J | ||
[:alnum:] |
Findet Ziffern und Buchstabenzeichen in Groß- und Kleinschreibung in der aktuellen Kollatierung. Beispiel: |
J | ||
[:digit:] |
Findet Ziffern in der aktuellen Kollatierung. Beispiel: |
J | ||
[:lower:] |
Findet Buchstaben in Kleinschreibung in der aktuellen Kollatierung. Beispiel: |
J | ||
[:space:] |
Findet ein einzelnes Leerzeichen (' '). Beispiel: Die folgende Anweisung sucht in Contacts.City nach einer Stadt mit einem Namen aus zwei Wörtern:
|
J | ||
[:upper:] |
Findet Buchstaben in Großschreibung in der aktuellen Kollatierung. Beispiel: |
J | ||
[:whitespace:] |
Findet eine Leerstelle wie ein Leerzeichen, Tabulatorzeichen, Zeilenvorschubzeichen und Wagenrücklaufzeichen. |
J | ||
[:ascii:] |
Findet jedes 7-Bit-ASCII-Zeichen (Ordinalwert zwischen 0 und 127). |
|||
[:blank:] |
Findet ein Leerzeichen oder einen horizontalen Tabulator.
|
|||
[:cntrl:] |
Findet ASCII-Zeichen mit einem Ordinalwert unter 32 oder Zeichenwert 127 (Steuerzeichen). Steuerzeichen sind Neue Zeile, Formularvorschub, Rückschritt, etc. |
|||
[:graph:] |
Findet druckbare Zeichen.
|
|||
[:print:] |
Findet druckbare Zeichen und Leerstellen.
|
|||
[:punct:] |
Findet eines der folgenden Zeichen: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~. In der Teilzeichenklasse |
|||
[:word:] |
Findet Buchstaben, Ziffern oder Unterstriche in der aktuellen Kollatierung.
|
|||
[:xdigit:] |
Findet ein Zeichen, das in der Zeichenklasse [0-9A-Fa-f] ist. |
Die folgenden Syntaxkonventionen werden von der Suchbedingung REGEXP und der Funktion REGEXP_SUBSTR unterstützt und setzen voraus, dass der Backslash das Escapezeichen ist. Diese Konventionen werden vom Suchausdruck SIMILAR TO nicht unterstützt .
Syntax des regulären Ausdrucks | Name und Bedeutung | ||
---|---|---|---|
\0xxx |
Findet das Zeichen, dessen Wert \0xxx ist, wobei xxx eine Abfolge von Oktalzeichen und 0 die Ziffer Null ist. Beispiel: |
||
\a |
Findet das Klingelzeichen. |
||
\A |
Wenn es außerhalb des Zeichensatzes verwendet wird, findet es den Beginn einer Zeichenfolge. Entspricht der Verwendung von |
||
\b |
Findet ein Rückschittzeichen. |
||
\B |
Findet ein Backslash-Zeichen (\). |
||
\c X |
Findet ein benanntes Steuerzeichen. Beispiel: \cZ für Strg-Z. |
||
\d |
Findet eine Ziffer in der aktuellen Kollatierung. Beispiel: Die nachstehende Anweisung sucht in Contacts.Phone alle Telefonnummern, die mit 00 enden:
\d kann sowohl innerhalb als auch außerhalb von Zeichenklassen verwendet werden und ist gleichwertig mit |
||
\D |
Findet alles, was keine Ziffer ist. Dies ist das Gegenteil von \d. \D kann sowohl innerhalb als auch außerhalb von Zeichenklassen verwendet werden und ist gleichwertig mit Bei der Verwendung von Kurzzeichen innerhalb von eckigen Klammern ist Vorsicht geboten. |
||
\e |
Findet das Escapezeichen. |
||
\E | Beendet die Verarbeitung von Metazeichen als Nicht-Metazeichen, eingeleitet durch \Q. | ||
\f |
Findet ein Formularvorschub-Zeichen. |
||
\n |
Findet eine Zeilenendmarke. |
||
\Q |
Behandelt alle Metazeichen als Nicht-Metazeichen, bis \E angetroffen wird. Beispiel: |
||
\r |
Findet ein Wagenrücklauf-Zeichen (CR). |
||
\s |
Findet eine Leerstelle oder ein als Leerzeichen behandeltes Zeichen. Beispiel: Die folgende Anweisung gibt alle Produktnamen aus Products.ProductName zurück, die mindestens eine Leerstelle im Namen haben:
\s kann sowohl innerhalb als auch außerhalb von Zeichenklassen verwendet werden und ist |
||
\S |
Findet ein Zeichen, das kein Leerzeichen ist. Dies ist das Gegenteil von \s und \S kann sowohl innerhalb als auch außerhalb von Zeichenklassen verwendet werden. Bei der Verwendung von Kurzzeichen innerhalb von eckigen Klammern ist Vorsicht geboten. |
||
\t |
Findet einen horizontalen Tabulator. |
||
\v |
Findet einen vertikalen Tabulator. |
||
\w |
Findet ein Buchstabenzeichen, ein Ziffernzeichen oder einen Unterstrich in der aktuellen Kollatierung. Beispiel: Die folgende Anweisung gibt alle Nachnamen aus Contacts.Surname zurück, die genau sieben alphanumerische Zeichen lang sind:
\w kann sowohl innerhalb als auch außerhalb von Zeichenklassen verwendet werden. Entspricht |
||
\W |
Findet alle Zeichen außer Buchstabenzeichen, Ziffernzeichen oder Unterstrichen in der aktuellen Kollatierung. Dies ist das
Gegenteil von \w und Dieser reguläre Ausdruck kann sowohl innerhalb als auch außerhalb von Zeichenklassen verwendet werden. |
||
\xhh |
Findet das Zeichen, dessen Wert 0xhh ist, wobei hh maximal zwei hexadezimale Zeichen sein können. Beispiel: Entspricht \x{hh}. |
||
\x{hhh} |
Findet das Zeichen, dessen Wert 0xhhh ist, wobei hhh maximal drei hexadezimale Zeichen sein können. |
||
\z und \Z |
Findet die Position (nicht das Zeichen) am Ende der Zeichenfolge. Entspricht |
Mit Assertierungen testen Sie, ob eine Bedingung wahr ist, und bestimmen die Position in der Zeichenfolge, an der die Übereinstimmungssuche beginnt. Assertierungen geben keine Zeichen zurück, da das Assertierungsmuster in der Fundstelle nicht enthalten ist. Assertierungen werden von der Suchbedingung REGEXP und der REGEXP_SUBSTR-Funktion unterstützt. Diese Konventionen werden vom Suchausdruck SIMILAR TO nicht unterstützt .
Die Assertierungen "Lookahead" und "Lookbehind" können bei REGEXP_SUBSTR nützlich sein, wenn Sie versuchen, eine Zeichenfolge aufzuteilen. So können Sie beispielsweise die Liste der Straßen (ohne Hausnummern) in der Address-Spalte der Customers-Tabelle zurückgeben, indem Sie folgende Anweisung ausführen:
SELECT REGEXP_SUBSTR( Street, '(?<=^\\S+\\s+).*$' ) FROM Customers; |
Ein anderes Beispiel: Sie können einen regulären Ausdruck verwenden, um zu prüfen, ob ein Kennwort bestimmten Regeln entspricht. Verwenden Sie eine Assertierung mit Nullbreite in der folgenden Form:
IF password REGEXP '(?=.*[[:digit:]])(?=.*[[:alpha:]].*[[:alpha:]])[[:word:]]{4,12}' THEN MESSAGE 'Password conforms' TO CLIENT; ELSE MESSAGE 'Password does not conform' TO CLIENT; END IF |
Das Kennwort ist gültig, wenn folgende Bedingungen zutreffen:
Kennwort hat mindestens eine Stelle (positive Assertierung der Nullbreite mit [[:digit:]])
Kennwort hat mindestens zwei Buchstaben (positive Assertierung der Nullbreite mit [[:alpha:]].*[[:alpha:]])
Kennwort enthält nur alphanumerische Zeichen oder Unterstriche ([[:word:]])
Kennwort ist mindestens 4 Zeichen und höchstens 12 Zeichen lang ({4,12})
Die nachstehende Tabelle enthält die von SQL Anywhere unterstützten Assertierungen:
Syntax | Bedeutung |
---|---|
(?= Muster ) |
|
(?! Muster) |
|
(?<= Muster) |
|
(?<! Muster) |
|
(?> Muster) |
|
(?: Muster) |
|
(?# Text) | Wird für Kommentare benutzt. Der Inhalt von Text wird ignoriert. |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |