SQL Vervolg

Hoofdstuk 24 - Regular Expressions

  • Reguliere Expressies kun je gebruiken in een WHERE clausule om nauwkeuriger te filteren
  • Reguliere Expressies zijn onderdeel van een taal die bedoelt is om te zoeken in tekst
  • Reguliere Expressies gebruik je om :
    • Het zoeken/filteren/vervangen van alleen de telefoonnummers in een tekst-file
    • Het zoek van bestanden met cijfers in het midden van de bestandsnaam
    • Het zoeken van woorden die herhalende voorkomen in een tekst-file
    • Het zoeken en vervangen van patronen in tekst
  • Reguliere Expressies worden ondersteund in veel programma's, zoals:
    • Besturingsystemen
    • Text-editors
    • File-rename tools
    • SQL clients
  • Reguliere Expressies hebben hun eigen syntax

Wil je meer weten over Reguliere Expressies bekijk dan het boek "Learning Regular Expressions" van Ben Forta


-- Oracle	
SELECT prod_name
FROM   Products
WHERE  REGEXP_LIKE(prod_name, '.2');
PROD_NAME
12 inch teddy bear

Bovenstaande voorbeeld kan ook uitgevoerd worden met alleen het LIKE Keyword maar dan moet er wel met 'meerdere' Wildcards gewerkt worden.


  • De punt in een reguliere expressie staat voor: één willekeurig karakter
  • Het zoeken naar patronen met reguliere expressies in Oracle is hoofdletter gevoelig
  • Gebruik de Pipe als OR conditie
-- Oracle	
SELECT prod_name
FROM   Products
WHERE  REGEXP_LIKE(prod_name, '8 | 12 | 18');
PROD_NAME
8 inch teddy bear
18 inch teddy bear

  • Naast de Punt voor één karakter kun je tussen [ ] ook een set specifieke karakters opgeven
  • [ ] is een andere vorm van het OR statement
-- Oracle	
SELECT prod_name
FROM   Products
WHERE  REGEXP_LIKE(prod_name, '[128] inch');
PROD_NAME
8 inch teddy bear
12 inch teddy bear
18 inch teddy bear

Bovenstaande functie is de verkorte notatie van [ 1 | 2 | 8 ]


  • Als je bij een set het ^ karakter toevoegd wordt de set negatief
-- Oracle	
SELECT prod_name
FROM   Products
WHERE  REGEXP_LIKE(prod_name, '[^12] inch');
  • Sets [ ] kunnen gebruikt worden om meerdere karakters te zoeken
  • De set [1234567890] zoekt alle strings met nummers erin. Dit kan ook verkort worden met [0-9]
  • De volgende sets mogen ook; [6-9], [a-m]
-- Oracle	
SELECT prod_name
FROM   Products
WHERE  REGEXP_LIKE(prod_name, '[1-8] inch');
  • Reguliere Expressie taal maakt gebruik van speciale karakters zoals; . | [ ] ^ -
  • Als je zoekt naar patronen die special karakters bevatten dan moet je het escape karakter \ gebruiken
  • Het escape karakter \ plaats je voor het speciale karakter
SELECT cust_contact
FROM   Customers
WHERE  REGEXP_LIKE(cust_contact, '\.');	
  • Het werken met set van karakters is heel gebruikelijk bij reguliere expressies
  • Om het werken met bepaalde karaktersets eenvoudiger te maken zijn er voorgedefinieerde sets
  • Voorgedefinieerde sets met karakters noemen we 'Character Classes'