Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie extrahiert man eine Gruppe aus einem regulären Ausdruck in Oracle?

Der dritte Parameter der Funktion REGEXP_SUBSTR gibt die Position im Zielstring an (de_desc in Ihrem Beispiel), wo Sie mit der Suche beginnen möchten. Angenommen, im angegebenen Teil der Zeichenfolge wird eine Übereinstimmung gefunden, wirkt sich dies nicht auf die Rückgabe aus.

In Oracle 11g gibt es einen sechsten Parameter für die Funktion, den Sie meiner Meinung nach verwenden möchten und der die Erfassungsgruppe angibt, die Sie zurückgeben möchten. Ein Beispiel für die richtige Verwendung wäre:

SELECT regexp_substr('abc[def]ghi', '\[(.+)\]', 1,1,NULL,1) from dual;

Wobei der letzte Parameter 1 Geben Sie die Nummer der Erfassungsgruppe an, die Sie zurückgeben möchten. Hier ist ein Link zur Dokumentation, die den Parameter beschreibt.

10g scheint diese Option nicht zu haben, aber in Ihrem Fall können Sie dasselbe Ergebnis erzielen mit:

select substr( match, 2, length(match)-2 ) from (
SELECT regexp_substr('abc[def]ghi', '\[(.+)\]') match FROM dual
);

da Sie wissen, dass ein Spiel am Anfang und am Ende genau ein Zeichen überzählig hat. (Alternativ könnten Sie RTRIM und LTRIM verwenden, um Klammern an beiden Enden des Ergebnisses zu entfernen.)