• PHP Deel 11: Regular Expressions

    8 April 2011 00:19 door
    Regular Expressions kunnen gebruikt worden om Strings te matchen en te vervangen. Eveneens zijn ze veel krachtiger dan dan standaard String-functies in PHP.



    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]/
    De rechte haakjes geven meerdere mogelijkheden aan, bovenstaand voorbeeld komt zowel met abp als met abo overeen.

    Met een recht streepje (|) kunnen we meerdere mogelijkheden geven:
    Code:
    /ab(po|cd)/
    Deze regular expression komt overeen met zowel abpo als abcd.

    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]$/';
    ?>
    11.3 Qauntifiers

    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
        
    }
    ?>
    We kunnen ook meerdere matches in 1 keer doen:

    PHP-code:
    <?php
        $regex 
    '/^(\w+)\s(\w+)/'
        
    $tekst 'qsretfdf qzefsdf';

        if(
    preg_match_all($regex$tekst$matches))
            
    var_dump($matches);
    ?>
    Dit voorbeeld geeft als output:
    Code:
    Array(3) {
    	[0] => String(16) "qsretfdf qzefsdf"
    	[1] => String(8) "qsretfdf"
    	[2] => String(8) "qzefsdf"
    }
    Tekst vervangen werkt zo:

    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);
    ?>
    De delen tussen haakjes (.*?) zijn verschillende onderdelen van de regex, we kunnen verschillende onderdelen definiëren, we kunnen naar de onderdelen verwijzen in onze vervanging met $1, $2, ..., ze worden van links naar rechts genummerd.

    Geschreven door: Martijn Croonen.
    Kleine aanpassingen door: Aerts Kurt.