REGEXP_SUBSTR-Funktion Oracle/PLSQL

In diesem Oracle-Lernprogramm wird erläutert, wie Sie die Oracle/PLSQL REGEXP_SUBSTR-Funktion mit Syntax und Beispielen verwenden.

Beschreibung

Die Oracle/PLSQL-Funktion REGEXP_SUBSTR ist eine Erweiterung der SUBSTR-Funktion. Mit dieser Funktion, die in Oracle 10g eingeführt wurde, können Sie mit einem regulären Ausdrucksmustervergleich einen Teilstring aus einem String extrahieren.

Syntax

Die Syntax für die REGEXP_SUBSTR-Funktion in Oracle/PLSQL lautet:

REGEXP_SUBSTR( string, pattern [, start_position [, nth_appearance [, match_parameter [, sub_expression ] ] ] ] )

Parameter oder Argumente

string Die zu suchende Zeichenfolge Dies können CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB oder NCLOB sein.

pattern Die Übereinstimmungsinformationen für reguläre Ausdrücke. Es kann eine Kombination aus Folgendem sein:

Wert Beschreibung
^ Entspricht dem Anfang einer Zeichenfolge. Wenn es mit einem match_parameter von ‚m‘ verwendet wird, stimmt es mit dem Anfang einer Zeile irgendwo innerhalb des Ausdrucks überein.
$ Entspricht dem Ende einer Zeichenfolge. Wenn es mit einem match_parameter von ‚m‘ verwendet wird, stimmt es mit dem Ende einer Zeile irgendwo innerhalb von Ausdruck überein.
* Entspricht null oder mehr Vorkommen.
+ Entspricht einem oder mehreren Vorkommen.
? Entspricht Null oder einem Vorkommen.
. Entspricht einem beliebigen Zeichen außer NULL.
| Wird wie ein „OR“ verwendet, um mehr als eine Alternative anzugeben.
[ ] Wird verwendet, um eine übereinstimmende Liste anzugeben, in der Sie versuchen, mit einem der Zeichen in der Liste übereinzustimmen.
[^ ] Wird verwendet, um eine nicht übereinstimmende Liste anzugeben, in der Sie versuchen, ein beliebiges Zeichen mit Ausnahme der Zeichen in der Liste zu finden.
( ) Wird zum Gruppieren von Ausdrücken als Unterausdruck verwendet.
{m} Entspricht m-mal.
{m,} Entspricht mindestens m-mal.
{m,n} Entspricht mindestens m-mal, aber nicht mehr als n-mal.
\n n ist eine Zahl zwischen 1 und 9. Entspricht dem n-ten Teilausdruck innerhalb von () vor der Begegnung mit \ n.
[..] Entspricht einem Sortierelement, das mehr als ein Zeichen enthalten kann.
[::] Entspricht Zeichenklassen.
[==] Entspricht Äquivalenzklassen.
\d Entspricht einem Ziffernzeichen.
\D Entspricht einem Nicht-Digit-Zeichen.
\w Entspricht einem Wortzeichen.
\W Entspricht einem Nicht-Wortzeichen.
\s Entspricht einem Leerzeichen.
\S entspricht einem Nicht-Leerzeichen-Zeichen.
\A Entspricht dem Anfang einer Zeichenfolge oder entspricht am Ende einer Zeichenfolge vor einem Zeilenvorschubzeichen.
\Z Entspricht am Ende einer Zeichenfolge.
*? Entspricht dem vorhergehenden Muster null oder mehr Vorkommen.
+? Stimmt das vorherige Muster mit einem oder mehreren Vorkommen überein.
?? Entspricht dem vorhergehenden Muster null oder einem Vorkommen.
{n}? Entspricht dem vorherigen Muster n-mal.
{n,}? Stimmt mindestens n mal mit dem vorhergehenden Muster überein.
{n,m}? Entspricht dem vorherigen Muster mindestens n-mal, aber nicht mehr als m-mal.

start_position Wahlweise. Es ist die Position in Zeichenfolge, an der die Suche beginnt. Wenn nicht angegeben, wird standardmäßig die erste Position in der Zeichenfolge verwendet.

nth_appearance Wahlweise. Es ist der n-te Auftritt von pattern in string. Wenn es weggelassen wird, wird standardmäßig 1 verwendet. Dies ist das erste Auftreten von Muster in Zeichenfolge.

match_parameter Wahlweise. Sie können das Übereinstimmungsverhalten für die Funktion REGEXP_SUBSTR ändern. Es kann eine Kombination der folgenden sein:

Wert Beschreibung

‚c‘ Führen Sie eine Unterscheidung zwischen Groß- und Kleinschreibung durch.

‚i‘ Führen Sie die Groß- / Kleinschreibung nicht aus.

’n‘ Ermöglicht die Übereinstimmung des Punkts (.) Mit dem Zeilenumbruchzeichen. Standardmäßig ist der Punkt ein Platzhalter.

‚m‘ Es wird angenommen, dass Ausdruck mehrere Zeilen hat, wobei ^ der Anfang einer Zeile und $ das Ende einer Zeile ist, unabhängig von der Position dieser Zeichen im Ausdruck. Standardmäßig wird der Ausdruck als einzelne Zeile angenommen.

‚x‘ Leerzeichen werden ignoriert. Standardmäßig werden Leerzeichen wie jedes andere Zeichen verglichen.

subexpression Wahlweise. Dies wird verwendet, wenn das Muster über Unterausdrücke verfügt und Sie angeben möchten, welcher Unterausdruck in Muster das Ziel ist. Es ist ein ganzzahliger Wert von 0 bis 9, der den Teilausdruck angibt, auf den das Muster passt.

Notiz

  • Die Funktion REGEXP_SUBSTR gibt einen Zeichenfolgenwert zurück.
  • Wenn die Funktion REGEXP_SUBSTR kein Muster findet, gibt sie NULL zurück.
  • Wenn für match_parameter widersprüchliche Werte angegeben werden, verwendet die Funktion REGEXP_SUBSTR den letzten Wert.
  • Wenn Sie den Parameter match_behavior nicht angeben, verwendet die Funktion REGEXP_SUBSTR den Parameter NLS_SORT, um zu bestimmen, ob eine Groß- / Kleinschreibung verwendet werden soll. Dabei wird davon ausgegangen, dass Zeichenfolge eine einzelne Zeile ist und dass das Punktzeichen einem beliebigen Zeichen entspricht (nicht dem Zeilenvorschub) Charakter).
  • Siehe auch die SUBSTR-Funktion.

Gilt für

Die Funktion REGEXP_SUBSTR kann in den folgenden Versionen von Oracle / PLSQL verwendet werden:

  • Oracle 12c, Oracle 11g, Oracle 10g

Beispiel – Übereinstimmung von Wörtern

Beginnen wir damit, das erste Wort aus einer Zeichenfolge zu extrahieren.

Beispielsweise:

In diesem Beispiel wird ‚Google ‚ zurückgegeben, da dabei alle Nicht-Whitespace-Zeichen extrahiert werden, wie durch (\S*) angegeben, und dann das erste Whitespace-Zeichen, wie durch (\s) angegeben. Das Ergebnis enthält sowohl das erste Wort als auch das Leerzeichen nach dem Wort.

Wenn Sie das Leerzeichen nicht in das Ergebnis aufnehmen möchten, können wir unser Beispiel wie folgt ändern:

In diesem Beispiel wird ‚Google‘ ohne Leerzeichen am Ende zurückgegeben.

Wenn wir das zweite Wort in der Zeichenfolge finden möchten, können wir unsere Funktion wie folgt ändern:

Dieses Beispiel würde ‚is ‚ mit einem Leerzeichen am Ende der Zeichenfolge zurückgeben.

Wenn wir das dritte Wort in der Zeichenfolge finden möchten, können wir unsere Funktion wie folgt ändern:

In diesem Beispiel wird ‚great ‚ mit einem Leerzeichen am Ende der Zeile zurückgegeben.

Beispiel – Übereinstimmung von Ziffern

Als Nächstes wollen wir uns ansehen, wie wir die Funktion REGEXP_SUBSTR verwenden, um ein einziges Ziffernmuster abzugleichen.

Beispielsweise:

In diesem Beispiel wird die erste Ziffer der Zeichenfolge extrahiert, wie in \d angegeben. In diesem Fall entspricht es der Nummer 2.

Wir könnten unser Muster ändern, um nach einer zweistelligen Zahl zu suchen.
Beispielsweise:

In diesem Beispiel wird eine Zahl extrahiert, die nebeneinander zwei Ziffern enthält, wie durch (\d)(\d) angegeben. In diesem Fall werden die numerischen Werte 2 und 4 übersprungen und 10 zurückgegeben.

Schauen wir uns nun an, wie wir die Funktion REGEXP_SUBSTR mit einer Tabellenspalte verwenden und nach einer zweistelligen Zahl suchen.

Beispielsweise:

In diesem Beispiel extrahieren wir den ersten zweistelligen Wert aus dem Adressfeld in der contacts -Tabelle.

Beispiel – Übereinstimmung mit mehr als einer Alternative

Das nächste Beispiel, das wir betrachten werden, bezieht sich auf die Verwendung von | Muster. Die | Muster wird wie ein „ODER“ verwendet, um mehrere Alternativen anzugeben.

Beispielsweise:

In diesem Beispiel wird ‚e‘ zurückgegeben, da nach dem ersten Vokal (a, e, i, o oder u) in der Zeichenfolge gesucht wird. Da wir keinen match_parameter-Wert angegeben haben, führt die REGEXP_SUBSTR-Funktion eine Groß- / Kleinschreibung durch, was bedeutet, dass das ‚A‘ in ‚AeroSmith‘ nicht übereinstimmt.

Wir könnten unsere Abfrage wie folgt ändern, um eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung wie folgt durchzuführen:

Da wir nun einen match_parameter von ‚i‘ angegeben haben, gibt die Abfrage ‚A‘ als Ergebnis zurück. Dieses Mal wird das ‚A‘ in ‚AeroSmith‘ als Übereinstimmung gefunden.

Lassen Sie uns nun schnell zeigen, wie Sie diese Funktion mit einer Spalte verwenden würden.

Nehmen wir an, wir haben eine contact -Tabelle mit folgenden Daten:

contact_id last_name
1000 AeroSmith
2000 Joy
3000 Scorpions

Lassen Sie uns nun die folgende Abfrage ausführen:

Dies sind die Ergebnisse, die von der Abfrage zurückgegeben würden:

contact_id last_name First Vowel
1000 AeroSmith A
2000 Joy o
3000 Scorpions o

Beispiel – Übereinstimmung bei nth_occurrence

Das nächste Beispiel, das wir uns ansehen werden, betrifft den Parameter nth_occurrence. Mit dem Parameter nth_occurrence können Sie auswählen, für welches Vorkommen des Musters Sie den Teilstring extrahieren möchten.

Erstes Vorkommen

Sehen wir uns an, wie man das erste Vorkommen eines Musters in einer Zeichenfolge extrahiert.

Beispielsweise:

In diesem Beispiel wird ‚A‘ zurückgegeben, da es das erste Vorkommen eines Vokals (a, e, i, o oder u) in der Zeichenfolge extrahiert.

Zweites Vorkommen

Als Nächstes extrahieren wir das zweite Vorkommen eines Musters in einer Zeichenfolge.

Beispielsweise:

In diesem Beispiel wird ‚e‘ zurückgegeben, da das zweite Vorkommen eines Vokals (a, e, i, o oder u) in der Zeichenfolge extrahiert wird.

Drittes Vorkommen

Beispielsweise:

In diesem Beispiel wird ‚o‘ zurückgegeben, da das dritte Vorkommen eines Vokals (a, e, i, o oder u) in der Zeichenfolge extrahiert wird.