Im heutigen Tipp widmen wir uns ein paar Praxisbeispielen zu Regulär Expression (Reguläre Ausdrücke) in Oracle.
Beispiel 1: Kreditkartennummern haben meist das Format 1234-1234-1234-1234
Wir suchen in einem String zwei 4er Blöcke mit Zahlen un einem Minus dazwischen und ersetzen jeden Block durch xxxx-xxxx:
- [[:digit:]] steht nur für Zahlen
- [4} 4 Zahlen
select regexp_replace(
'1234-5678-1111-2222',
'[[:digit:]]{4}-[[:digit:]]{4}','xxxx-xxxx') from dual;
Ergebnis: xxxx-xxxx-xxxx-xxxx
Oder wir suchen vier 4er Blöcke mit Zahlen und ersetzen das mit XXXX:
select regexp_replace(
'1234-5678-1111-2222',
'[[:digit:]]{4}','xxxx')
from dual;
Ergebnis: xxxx-xxxx-xxxx-xxxx
Nur der letzte 4er Block soll ausgegeben werden
select regexp_replace(
'1234-5678-1111-2222',
'([[:digit:]]{4})(-)([[:digit:]]{4})(-)([[:digit:]]{4})(-)([[:digit:]]{4})','XXXX-XXXX-XXXX-\7') from dual;
Ergebnis:
XXXX-XXXX-XXXX-2222
Alternativ können sie anstatt [[:digit:]] durch \d ersetzen
select regexp_replace(
'1234-5678-1111-2222',
'\d{4}','x')
from dual;
Ergebnis: x-x-x-x
Beispiel 2: Wir löschen einige HTML Tags in einem String:
- \/?div findet div,
- \/?p findet p und
- \/?strong findet strong Tags
- (da / ein Sonderzeichen ist, muss es mit \ entwertet (escaped) werden)
select regexp_replace(
'<div>Hallo</div><strong> Kurs</strong>',
'(<\/?div>|<\/?p>|<\/?strong>)','')
from dual;
oder wir löschen alle HTML Tags im String
select regexp_replace(
'<div>Hallo</div><strong> Kurs</strong>',
'<\/?[^>]*>,'')
from dual;
Das war eine kleine Beispielauswahl, die von uns ständig erweitert wird. Oder Sie kommen z.B. in den PL/SQL oder PL/SQL II Kurs, da werden diese Themen auch ausführlich besprochen.