In Oracle der REGEXP_SUBSTR()
Die Funktion gibt basierend auf einem regulären Ausdrucksmuster eine Teilzeichenfolge aus einer Zeichenfolge zurück.
Es erweitert die Funktionalität von SUBSTR()
funktionieren, indem sie uns erlauben, reguläre Ausdrucksmuster zu verwenden.
Syntax
Die Syntax lautet wie folgt:
REGEXP_SUBSTR ( source_char, pattern
[, position
[, occurrence
[, match_param
[, subexpr ]
]
]
]
)
Wo:
source_char
ist ein Zeichenausdruck, der als Suchwert dient.pattern
ist der reguläre Ausdruck.position
ist eine positive Ganzzahl, die angibt, wo die Suche beginnen soll. Der Standardwert ist1
, was bedeutet, beginnen Sie die Suche beim ersten Zeichen.occurrence
ist eine positive Ganzzahl, die angibt, nach welchem Vorkommen gesucht werden soll. Der Standardwert ist1
, was bedeutet, dass nach dem ersten Vorkommen gesucht wird.match_param
können Sie das standardmäßige Übereinstimmungsverhalten der Funktion ändern. Beispielsweise können Sie die Groß-/Kleinschreibung angeben, wie mit mehreren Zeilen und Leerzeichen umgegangen wird usw. Dieses Argument funktioniert genauso wie bei Verwendung mitREGEXP_COUNT()
Funktion. Weitere Informationen finden Sie in der Oracle-Dokumentation für diese Funktion.- Für ein
pattern
mit Teilausdrücken,subexpr
ist eine nicht negative Ganzzahl von 0 bis 9, die angibt, welcher Unterausdruck inpattern
ist soll von der Funktion zurückgegeben werden. Dieses Argument funktioniert genauso wie bei Verwendung mitREGEXP_INSTR()
Funktion. Weitere Informationen zu dieser Funktion finden Sie in der Dokumentation von Oracle.
Beispiel
Hier ist ein einfaches Beispiel für die Verwendung von REGEXP_SUBSTR()
bei Oracle:
SELECT
REGEXP_SUBSTR('Cats and dogs', 'd.g')
FROM DUAL;
Ergebnis:
dog
In diesem Fall gibt es eine Übereinstimmung, und die erste (und in diesem Fall einzige) übereinstimmende Teilzeichenfolge wird zurückgegeben.
Reguläre Ausdrücke können sehr leistungsfähig sein, und dieses Beispiel verwendet ein sehr einfaches Beispiel. Um REGEXP_SUBSTR()
zu verwenden Um effektiv zu sein, müssen Sie das richtige Muster kennen, um das gewünschte Ergebnis zu erzielen.
Keine Übereinstimmung
Hier ist ein Beispiel, bei dem es keine Übereinstimmung gibt:
SET NULL 'null';
SELECT REGEXP_SUBSTR('My dogs like dregs', 't.g')
FROM DUAL;
Ergebnis:
null
Es gibt keine Übereinstimmung, also null
zurückgegeben wird.
Standardmäßig geben SQLcl und SQL*Plus ein Leerzeichen zurück, wenn null
tritt als Ergebnis eines SQL SELECT
auf Erklärung.
Sie können jedoch SET NULL
verwenden um eine andere Zeichenfolge anzugeben, die zurückgegeben werden soll. Hier habe ich angegeben, dass der String null
zurückgegeben werden soll.
Mehrere Übereinstimmungen
Hier ist ein Beispiel mit mehreren Übereinstimmungen:
SELECT
REGEXP_SUBSTR('My dogs have dags', 'd.g')
FROM DUAL;
Ergebnis:
dog
Sie können jedoch bei Bedarf angeben, welches Vorkommen ersetzt werden soll:
SELECT
REGEXP_SUBSTR('My dogs have dags', 'd.g', 1, 2)
FROM DUAL;
Ergebnis:
dag
Beachten Sie, dass ich hier zwei Argumente hinzugefügt habe; 1
und 2
. Die 1
gibt den Aufenthaltsort in der Zeichenfolge an, um die Suche zu starten (in diesem Fall beim ersten Zeichen). Die 2
gibt an, nach welchem Vorkommen gesucht werden soll. In diesem Fall wird nach dem zweiten Vorkommen gesucht.
Folgendes passiert, wenn ich die Suche nach dem ersten Vorkommen starte:
SELECT
REGEXP_SUBSTR('My dogs have dags', 'd.g', 8, 2)
FROM DUAL;
Ergebnis:
null
In diesem Fall gibt es keine Übereinstimmung, da es nach der Startposition nur noch ein weiteres Vorkommen gibt.
Wenn ich das letzte Argument in 1
ändere , dann erhalten wir eine Übereinstimmung (weil es das erste Vorkommen nach der angegebenen Startposition ist):
SELECT
REGEXP_SUBSTR('My dogs have dags', 'd.g', 8, 1)
FROM DUAL;
Ergebnis:
dag
Groß-/Kleinschreibung
Der REGEXP_SUBSTR()
Die Funktion folgt den Sortierungsbestimmungs- und Ableitungsregeln von Oracle, die die zu verwendende Sortierung definieren, wenn die Zeichenfolge mit dem Muster abgeglichen wird.
Mit dem optionalen fünften Argument können Sie jedoch explizit die Groß-/Kleinschreibung angeben. Wenn Sie dies tun, überschreibt es alle Groß- und Kleinschreibung oder Akzente der bestimmten Kollatierung.
Sie können i
angeben für Übereinstimmung ohne Berücksichtigung der Groß-/Kleinschreibung und c
für Groß- und Kleinschreibung.
Hier ist ein Beispiel:
SELECT
REGEXP_SUBSTR('My Cats', 'c.t', 1, 1) AS "Default",
REGEXP_SUBSTR('My Cats', 'c.t', 1, 1, 'i') AS "Case Insensitive",
REGEXP_SUBSTR('My Cats', 'c.t', 1, 1, 'c') AS "Case Sensitive"
FROM DUAL;
Ergebnis:
Default Case Insensitive Case Sensitive __________ ___________________ _________________ null Cat null
Basierend auf diesen Ergebnissen scheint bei meiner Sortierung zwischen Groß- und Kleinschreibung unterschieden zu werden. Die anderen beiden Strings wurden zu einem case-insensitiven bzw. case-sensitiven Matching gezwungen.
Teilausdrücke
Hier ist ein Beispiel für die Verwendung des sechsten Arguments, um ein bestimmtes Unterausdrucksmuster zurückzugeben:
SELECT REGEXP_SUBSTR(
'catdogcow',
'(c.t)(d.g)(c.w)',
1, 1, 'i', 1
)
FROM DUAL;
Ergebnis:
cat
In diesem Fall habe ich den ersten Teilausdruck zurückgegeben.
Folgendes passiert, wenn ich den dritten Unterausdruck spezifiziere:
SELECT REGEXP_SUBSTR(
'catdogcow',
'(c.t)(d.g)(c.w)',
1, 1, 'i', 3
)
FROM DUAL;
Ergebnis:
cow
Null-Argumente
Wenn irgendein Argument null
ist , ist das Ergebnis null
:
SET NULL 'null';
SELECT
REGEXP_SUBSTR(null, 'c.t', 1, 1, 'i', 1) AS "1",
REGEXP_SUBSTR('Cat', null, 1, 1, 'i', 1) AS "2",
REGEXP_SUBSTR('Cat', 'c.t', null, 1, 'i', 1) AS "3",
REGEXP_SUBSTR('Cat', 'c.t', 1, null, 'i', 1) AS "4",
REGEXP_SUBSTR('Cat', 'c.t', 1, 1, null, 1) AS "5",
REGEXP_SUBSTR('Cat', 'c.t', 1, 1, 'i', null) AS "6"
FROM DUAL;
Ergebnis:
1 2 3 4 5 6 _______ _______ _______ _______ _______ _______ null null null null null null
Falsche Anzahl von Argumenten
Wenn der Funktion keine oder zu wenige Argumente übergeben werden, führt dies zu einem Fehler:
SELECT REGEXP_SUBSTR()
FROM DUAL;
Ergebnis:
Error starting at line : 1 in command - SELECT REGEXP_SUBSTR() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action:
Dasselbe gilt, wenn wir zu viele Argumente übergeben:
SELECT REGEXP_SUBSTR('Cat', 'c.t', 1, 1, 'i', 1, 'oops')
FROM DUAL;
Ergebnis:
Error starting at line : 1 in command - SELECT REGEXP_SUBSTR('Cat', 'c.t', 1, 1, 'i', 1, 'oops') FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function" *Cause: *Action:
Weitere Informationen
Der REGEXP_SUBSTR()
-Funktion (sowie die andere Implementierung regulärer Ausdrücke von Oracle) entspricht dem IEEE Portable Operating System Interface (POSIX)-Standard für reguläre Ausdrücke und den Unicode-Richtlinien für reguläre Ausdrücke des Unicode-Konsortiums.
Weitere Informationen und Beispiele für REGEXP_SUBSTR()
finden Sie in der Oracle-Dokumentation Funktion.