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:
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:
1 2 3 4 |
SELECT REGEXP_SUBSTR ('Google is a great search engine.', '(\S*)(\s)') FROM DUAL; -- Ergebnis: 'Google ' |
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:
1 2 3 4 |
SELECT REGEXP_SUBSTR ('Google is a great search engine.', '(\S*)') FROM DUAL; -- Ergebnis: 'Google' |
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:
1 2 3 4 |
SELECT REGEXP_SUBSTR ('Google is a great search engine.', '(\S*)(\s)', 1, 2) FROM DUAL; -- Ergebnis: 'is ' |
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:
1 2 3 4 |
SELECT REGEXP_SUBSTR ('Google is a great search engine.', '(\S*)(\s)', 1, 4) FROM DUAL; -- Ergebnis: 'great ' |
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:
1 2 3 4 |
SELECT REGEXP_SUBSTR ('2, 4, und 10 sind Zahlen in diesem Beispiel', '\d') FROM DUAL; -- Ergebnis: '2 ' |
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:
1 2 3 4 |
SELECT REGEXP_SUBSTR ('2, 4, und 10 sind Zahlen in diesem Beispiel', '(\d)(\d)') FROM DUAL; -- Ergebnis: '10' |
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:
1 2 |
SELECT REGEXP_SUBSTR (address, '(\d)(\d)') FROM contacts; |
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:
1 2 3 4 |
SELECT REGEXP_SUBSTR ('AeroSmith', 'a|e|i|o|u') FROM DUAL; -- Ergebnis: 'e' |
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:
1 2 3 4 |
SELECT REGEXP_SUBSTR ('AeroSmith', 'a|e|i|o|u', 1, 1, 'i') FROM DUAL; -- Ergebnis: 'A' |
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:
1 2 3 4 |
SELECT contact_id, last_name, REGEXP_SUBSTR (last_name, 'a|e|i|o|u', 1, 1, 'i') AS "First Vowel" FROM contacts; |
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:
1 2 3 4 |
SELECT REGEXP_SUBSTR ('AeroSmith', 'a|e|i|o|u', 1, 1, 'i') FROM DUAL; -- Ergebnis: 'A' |
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:
1 2 3 4 |
SELECT REGEXP_SUBSTR ('AeroSmith', 'a|e|i|o|u', 1, 2, 'i') FROM DUAL; -- Ergebnis: 'e' |
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:
1 2 3 4 |
SELECT REGEXP_SUBSTR ('AeroSmith', 'a|e|i|o|u', 1, 3, 'i') FROM dual; -- Ergebnis: 'o' |
In diesem Beispiel wird ‚o‘ zurückgegeben, da das dritte Vorkommen eines Vokals (a, e, i, o oder u) in der Zeichenfolge extrahiert wird.