REGEXP_INSTR-Funktion Oracle/PLSQL

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

Beschreibung

Die Oracle/PLSQL REGEXP_INSTR-Funktion

Syntax

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

REGEXP_INSTR( string, pattern [, start_position [, nth_appearance [, return_option [, match_parameter [, sub_expression ] ] ] ] ] )

Parameter oder Argumente

string Строка для поиска. Строкой могут быть CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB или NCLOB.

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 pattern null oder mehr Vorkommen.
+? Stimmt das vorherige pattern mit einem oder mehreren Vorkommen überein.
?? Entspricht dem vorhergehenden pattern null oder einem Vorkommen.
{n}? Entspricht dem vorherigen pattern n-mal.
{n,}? Stimmt mindestens n mal mit dem vorhergehenden pattern überein.
{n,m}? Entspricht dem vorherigen pattern 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.

return_option Wahlweise. Wenn eine return_option von 0 bereitgestellt wird, wird die Position des ersten Zeichens des Auftretens eines Musters zurückgegeben. Wenn eine return_option von 1 bereitgestellt wird, wird die Position des Zeichens nach dem Auftreten des Musters zurückgegeben. Wenn weggelassen, ist der Standardwert 0.

match_parameter Wahlweise. Sie können das Übereinstimmungsverhalten für die Funktion REGEXP_INSTR ä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 pattern über Unterausdrücke verfügt und Sie angeben möchten, welcher Unterausdruck in pattern das Ziel ist. Es ist ein ganzzahliger Wert von 0 bis 9, der den Teilausdruck angibt, auf den das pattern passt.

Notiz

  • Die Funktion REGEXP_INSTR gibt einen numerischen Wert zurück.
  • Wenn die Funktion REGEXP_INSTR kein pattern findet, gibt sie 0 zurück.
  • Wenn für match_parameter widersprüchliche Werte angegeben werden, verwendet die Funktion REGEXP_INSTR den letzten Wert.
  • Wenn Sie den Parameter match_behavior nicht angeben, verwendet die Funktion REGEXP_INSTR 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 INSTR-Funktion.

Gilt für

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

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

Beispiel – Übereinstimmung mit einem einzelnen Zeichen

Beginnen wir mit dem einfachsten Fall. Finden wir die Position des ersten ‚t‘-Zeichens in einer Zeichenfolge.

Zum Beispiel:

In diesem Beispiel wird 10 zurückgegeben, da bei Groß- und Kleinschreibung die Suche nach dem ‚o‘-Register durchgeführt wird. Deshalb überspringt er die Zeichen ‚O‘ und findet das erste ‚O‘ an Position 10.

Wenn wir sowohl ein kleines ‚o‘ als auch ein großes ‚O‘ in das Ergebnis aufnehmen und eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung durchführen möchten, ändern wir unsere Abfrage wie folgt:

Da wir nun eine start_position von 1, ein nth_appearance von 1, eine return_option von 0 und einen match_parameter von ‚i‘ angeben, gibt die Abfrage 1 als Ergebnis zurück. Diesmal sucht die Funktion sowohl nach ‚o‘ als auch nach ‚0‘ und gibt das erste Vorkommen zurück.

Wenn wir das erste Vorkommen des Zeichens ‚o‘ in einer Spalte finden möchten, könnten wir Folgendes versuchen (Suche ohne Berücksichtigung der Groß- und Kleinschreibung):

Dies würde das erste Vorkommen von ‚o‘ oder ‚O‘ Werten im Feld last_name aus der Kontakttabelle zurückgeben.

Beispiel – Übereinstimmung mit mehreren Zeichen

Als Nächstes wollen wir uns ansehen, wie wir die Funktion REGEXP_INSTR verwenden, um ein pattern mit mehreren Zeichen zu finden.

Zum Beispiel:

Dieses Beispiel gibt das erste Vorkommen von ‚ow‘ in der Zeichenfolge zurück. Es wird auf dem ‚ow‘ im Wort „shows“ passen.

Wir könnten die Startposition der Suche ändern, sodass wir die Suche von der Mitte des Strings aus durchführen.

Zum Beispiel:

In diesem Beispiel wird die Suche nach dem pattern von ‚ow‘ an Position 16 in der Zeichenfolge gestartet. In diesem Fall werden die ersten 15 Zeichen der Zeichenfolge übersprungen, bevor nach dem pattern gesucht wird.

Schauen wir uns nun an, wie wir die Funktion REGEXP_INSTR mit einer Tabellenspalte verwenden und nach mehreren Zeichen suchen.

Zum Beispiel:

In diesem Beispiel suchen wir nach dem pattern im Feld other_comments 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 | pattern. Die | pattern wird wie ein „ODER“ verwendet, um mehrere Alternativen anzugeben.

Zum Beispiel:

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

Wir könnten unsere Abfrage ä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 1 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_occurrence
1000 AeroSmith 1
2000 Joy 2
3000 Scorpions 3

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, von welchem Vorkommen des pattern Sie die Position zurückgeben möchten.

Erstes Vorkommen

Sehen wir uns an, wie Sie das erste Vorkommen eines pattern in einer Zeichenfolge finden.

Zum Beispiel:

Dieses Beispiel gibt 2 zurück, da nach dem ersten Vorkommen eines Vokals (a, e, i, o oder u) in der Zeichenfolge gesucht wird.

Zweites Vorkommen

Als Nächstes suchen wir nach dem zweiten Vorkommen eines pattern in einer Zeichenfolge.

Zum Beispiel:

In diesem Beispiel wird 4 zurückgegeben, da nach dem zweiten Vorkommen eines Vokals (a, e, i, o oder u) in der Zeichenfolge gesucht wird.

Drittes Vorkommen

Zum Beispiel:

Dieses Beispiel gibt 6 zurück, da nach dem dritten Vorkommen eines Vokals (a, e, i, o oder u) in der Zeichenfolge gesucht wird.

Beispiel – Parameter return_option

Abschließend wollen wir uns ansehen, wie der Parameter return_option unsere Ergebnisse beeinflusst.

Zum Beispiel:

In diesem grundlegenden Beispiel suchen wir nach einem pattern in einer Zeichenfolge, und die Suche unterscheidet nicht zwischen Groß- und Kleinschreibung. Wir haben den Parameter return_option als 0 angegeben. Dies bedeutet, dass die Position des ersten Zeichens des pattern zurückgegeben wird.

Nun ändern wir den Parameter return_option in 1 und sehen, was passiert.

Zum Beispiel:

Ein Parameter return_option von 1 weist die REGEXP_INSTR-Funktion an, die Position des Zeichens nach dem übereinstimmenden pattern zurückzugeben. In diesem Beispiel gibt die Funktion 12 zurück.