Tutorials
Regular Expressions
De basis uitleg over regular expressions. Waarvoor ze nou precies zijn en waarvoor ze gebruikt kunnen worden.
Pagina 1
Het eerste woord herkennen
Regular expressions worden gebruikt voor geavanceerde string vergelijkingen en manipulatie. Ze zijn vaak niet iets 'moois' om naar te kijken zoals:
^.+@.+\\..+$
Deze handige maar enge code is genoeg om sommige programmeurs hoofdpijn te bezorgen en goed genoeg om het niet eens te willen weten voor anderen. Maar jij niet! Ook al neemt het een tijdje om te leren, regular expressions, oftewel RE's zoals ze soms ook wel worden genoemd, kunnen heel erg handig zijn; en als je eenmaal hebt geleerd hoe je ze gebruikt in PHP, kun je simpelweg deze kennis gebruiken (met kleine modificaties) voor andere talen en UNIX utilities die regular expressions bevatten, zoals Perl, JavaScript, sed, awk, emacs, vi, grep, etc.
Laten we bij het begin beginnen. Een regular expression is een patroon, een set van karakters die de aard van een string beschrijft. Het patroon kan zo simpel zijn als een normale string; of het kan extreem complex zijn, indien er gebruik wordt gemaakt van speciale karakters of je een specifieke tekst wil zoeken.
<?
^eerste
?>
Dit patroon bevat het speciale karakter ^, welke aangeeft dat het patroon alleen een overeenkomst heeft met strings die beginnen met 'eerste'. Dus de string 'Eerste voetbal wedstrijd van het jaar' zou een overeenkomst maken, maar de string 'Vandaag is de eerste voetbal wedstrijd van het jaar' zou geen overeenkomst maken.
^.+@.+\\..+$
Deze handige maar enge code is genoeg om sommige programmeurs hoofdpijn te bezorgen en goed genoeg om het niet eens te willen weten voor anderen. Maar jij niet! Ook al neemt het een tijdje om te leren, regular expressions, oftewel RE's zoals ze soms ook wel worden genoemd, kunnen heel erg handig zijn; en als je eenmaal hebt geleerd hoe je ze gebruikt in PHP, kun je simpelweg deze kennis gebruiken (met kleine modificaties) voor andere talen en UNIX utilities die regular expressions bevatten, zoals Perl, JavaScript, sed, awk, emacs, vi, grep, etc.
Laten we bij het begin beginnen. Een regular expression is een patroon, een set van karakters die de aard van een string beschrijft. Het patroon kan zo simpel zijn als een normale string; of het kan extreem complex zijn, indien er gebruik wordt gemaakt van speciale karakters of je een specifieke tekst wil zoeken.
<?
^eerste
?>
Dit patroon bevat het speciale karakter ^, welke aangeeft dat het patroon alleen een overeenkomst heeft met strings die beginnen met 'eerste'. Dus de string 'Eerste voetbal wedstrijd van het jaar' zou een overeenkomst maken, maar de string 'Vandaag is de eerste voetbal wedstrijd van het jaar' zou geen overeenkomst maken.
Pagina 2
Eerste en laatste
Net zoals de ^ karakter een overeenkomst zou hebben met iets aan het begin van een string, kijkt $ naar het einde van een string.
<?
laatste$
?>
Er zou een overeenkomst zijn indien de string 'Jij was weer laatste' bevat maar het zou geen overeenkomst zijn met 'laatste'. ^ en $ kunnen ook samen gebruikt worden (met geen leidende karakters in het patroon), als voorbeeld:
<?
^laatste$
?>
Het zou alleen met de string 'laatste' overeenkomen. Als een patroon geen ^ of $ bevat, dan zal de overeenkomst 'true' zijn als het patroon ergens is gevonden in de source string. Voor de string:
<?
De eerste voetbal wedstrijd van het jaar
is tevens ook de laatste
?>
zou het patroon
<?
laatste
?>
een overeenkomst hebben.
De letters in het patroon ("e", "e", "r", "s", "t" en "e") zijn literale karakters. Letters en nummer zetten zichzelf letterlijk in de source string. Voor complexere karakters, zoals witte spaties, of een dollar teken bijvoorbeeld, moeten ge-escaped worden. Escape's beginnen allemaal met een backslash (\). Voor een tab karakter, is de syntax \t. Dus als we willen detecteren wanneer een string met een tab begint, gebruiken we het patroon:
^\t
Dit zou overeenkomen met de strings:
<?
De wedstrijd werd verloren
en een nieuwe winnaar was geboren
?>
omdat beide van deze zinnen beginnen met tabs. \n wordt beschouwd als een nieuwe regel karakter, \f is for een form en \r is een return. De meesten kun je simpel escapen door een \. Om een backslash zelf te escapen gebruiken we \\. Een . zou ge-escaped worden als \. en ga zo maar door (er komt binnekort een volledige lijst met escaped karakters).
Om regular expressions te kunnen gebruiken, kun je eens een kijkje nemen op http://www.phphulp.nl/docs/howto/index.php?page=8#ss8.1 ..
<?
laatste$
?>
Er zou een overeenkomst zijn indien de string 'Jij was weer laatste' bevat maar het zou geen overeenkomst zijn met 'laatste'. ^ en $ kunnen ook samen gebruikt worden (met geen leidende karakters in het patroon), als voorbeeld:
<?
^laatste$
?>
Het zou alleen met de string 'laatste' overeenkomen. Als een patroon geen ^ of $ bevat, dan zal de overeenkomst 'true' zijn als het patroon ergens is gevonden in de source string. Voor de string:
<?
De eerste voetbal wedstrijd van het jaar
is tevens ook de laatste
?>
zou het patroon
<?
laatste
?>
een overeenkomst hebben.
De letters in het patroon ("e", "e", "r", "s", "t" en "e") zijn literale karakters. Letters en nummer zetten zichzelf letterlijk in de source string. Voor complexere karakters, zoals witte spaties, of een dollar teken bijvoorbeeld, moeten ge-escaped worden. Escape's beginnen allemaal met een backslash (\). Voor een tab karakter, is de syntax \t. Dus als we willen detecteren wanneer een string met een tab begint, gebruiken we het patroon:
^\t
Dit zou overeenkomen met de strings:
<?
De wedstrijd werd verloren
en een nieuwe winnaar was geboren
?>
omdat beide van deze zinnen beginnen met tabs. \n wordt beschouwd als een nieuwe regel karakter, \f is for een form en \r is een return. De meesten kun je simpel escapen door een \. Om een backslash zelf te escapen gebruiken we \\. Een . zou ge-escaped worden als \. en ga zo maar door (er komt binnekort een volledige lijst met escaped karakters).
Om regular expressions te kunnen gebruiken, kun je eens een kijkje nemen op http://www.phphulp.nl/docs/howto/index.php?page=8#ss8.1 ..
Reacties
0