Het mag niet met een '-' beginnen maar in de string mogen alleen letters voorkomen maar ook een streepje. Formulier ik dit goed in de reguliere expressie?
Nope, dan zul je de backslash zelf ook weer moeten escapen:
[\\a\-z] --> \, a, - en z
[\\] --> de backslash \
[\] --> fout, de ] wordt nu geescaped en als normaal teken gezien
[\]] --> goed, nu wordt een ] gematched
Goed, voor de rest kun je dit zelf natuurlijk ook allemaal uitproberen. Kijk anders ook nog eens naar deze regex tutorial: http://phphulp.nl/php/tutorials/4/520/
Jah maar omdat het tussen brackets staat dacht ik dat het gewoon voor een \ stond
Omdat dit in mijn boek stond:
"Bepaalde symbolen worden gebruikt om het patroon te definiƫren. Als we die symbolen willen gebruiken als symbool, dan worden ze voorafgegaan door een backslash (\). Bijvoorbeeld "^\&" komt overeen emt een string die begint emt een dollarteken. Binnen brackets [] geldt dit neit. Daar heeft elk teken zijn normale betekenis."
Klopt het dat binnen brackets elk teken zijn normale betekenis heeft of heeft elk teken gewoon zijn 'meta-karakter betekenis' ?
Waar is het zelf uitproberen toch gebleven? Deze vraag had je heel makkelijk kunnen beantwoorden door zelf even te proberen...
<?php
$string = '$test';
echo preg_match('/^$test$/', $string); // 0
echo preg_match('/^\$test$/', $string); // 1
echo preg_match('/^[$]test$/', $string); // 1
$string = 'a-z';
echo preg_match('/^a-z$/', $string); // 1
echo preg_match('/^[a-z]+$/', $string); // 0
echo preg_match('/^[a\-z]+$/', $string); // 1
echo preg_match('/^[az-]+$/', $string); // 1
?>
Met andere woorden, een meta character wordt tussen brackets als normaal character geinterpreteerd. Dit geldt echter niet voor de backslash en het streepje.
De backslash behoudt ook binnen brackets zijn escapende eigenschappen en het streepje kan tussen brackets een range aangeven...