11.1 Delimiter
Om te beginnen hebben we een delimiter nodig, deze geeft het begin en einde van onze Regular Expression aan. Dit is een karakter dat op aan het begin en op het einde staat, dit karakter mag niet in de regex zelf voorkomen. Meestal wordt hiervoor een slash gebruikt, als er echter gewerkt wordt met mappen dient er een andere karakter gekozen te worden.
Code:
/ab[po]/
Met een recht streepje (|) kunnen we meerdere mogelijkheden geven:
Code:
/ab(po|cd)/
11.2 Metacharacters
Er bestaan een aantal speciale karakters:
Een punt (.) duidt op eender welk karakter, de karakters ^ en $ betekenen respectievelijk het begin en het einde van de string, \s matched alle spaties en tabs, \d alle getallen en \w alle woorden.
^ en $ doen niet hetzelfde als de delimiter, de delimiter geeft het begin en einde van de regex aan, de metacharacters geven het begin en einde van de string aan, als je de regex begint met ^ zal er alleen een match zijn als deze aan het begin van de string staat.
PHP-code:
<?php
# Deze regex matcht met abc, abd maar ook met sqdfabcdfd.
$regex = '/ab[cd]/';
# Deze regex match alleen met abc en abd omdat de metacharacters hier het
# begin en einde van de string aangeven
$regex = '/^ab[cd]$/';
?>
Met een qauntifier kunnen we aangeven hoeveel keer een karakter voorkomt. Deze qauntifiers zijn beschikbaar in PHP:
- * Komt niet of meerdere keren voor
- + Komt minstens 1 keer voor
- ? Komt niet of net 1 keer voor
- {n,m} Komt tenminste n keer voor en maximaal m keer
11.4 Gebruik
Regular expressions kunnen in PHP gebruikt worden om een patroon te controleren en om tekst te verangen.
Een patroon controleren gaat zo:
PHP-code:
<?php
# Deze regex matcht met iedere letter en met alle spaties en tabs
$regex = '/[a-zA-Z\s]/';
$tekst = 'qsretfdf qzefsdf';
if(preg_match($regex, $tekst, $matches))
{
// Tekst matced met het patroon
}
?>
PHP-code:
<?php
$regex = '/^(\w+)\s(\w+)/';
$tekst = 'qsretfdf qzefsdf';
if(preg_match_all($regex, $tekst, $matches))
var_dump($matches);
?>
Code:
Array(3) { [0] => String(16) "qsretfdf qzefsdf" [1] => String(8) "qsretfdf" [2] => String(8) "qzefsdf" }
PHP-code:
<?php
$regex = '/\[b\](.*?)\[/b\]/i';
$tekst = '[b]Dit is vette tekst[/b]';
$vervang = '<b>$1</b>';
# De [b] tags worden nu vervangen door hun HTML variant(<b>).
$resultaat = preg_replace($regex, $vervang, $tekst);
?>
Geschreven door: Martijn Croonen.
Kleine aanpassingen door: Aerts Kurt.