Bonjour,
Pour un correcteur syntaxique j'ai besoin de savoir si une chaîne correspond bien à :
0 ou plus caractères parmi ( et espace, suivi de 1 ou plus caractères a-z, 0-9 et underscore, suivi de 0 ou plus caractères parmi ) et espace.
D'instinct je me suis dit que preg_match était une bonne piste avec quelque chose dans le genre :
([( ]*) ([a-z0-9_]+) ([) ]*)
Mais de fait preg_match permet de déterminer si tout ou partie de la chaîne testée correspond au filtre, alors que moi que la chaîne dans son intégralité corresponde au filtre.
Par exemple la chaîne "abc)poi" correspond puisque une partie de la chaîne, par exemple "a" correspond.
1. Existe t-il une fonction PHP qui permet de tester qu'une chaîne dans son intégralité corresponde à un filtre (et non pas des morceaux) ?
2. Faut-il prendre le problème dans l'autre sens et chercher à mettre au point un masque qui va proposer les erreurs et tester sur ce masque ? Par exemple en cherchant un caractère autre que ceux-ci, puis en cherchant une parenthèse ouverte après un premier caractère, puis etc. peut être ce genre de chose :
[^)( a-z0-9_] | ([a-z0-9_]+)([ )]*)\( | \)([ (]*)([a-z0-9_]+)
3. Vaut-il mieux analyser caractère après caractère ?
Globalement, face à ce genre de cas de figure, quelle est la meilleur piste ?
Merci,
Yokho
Partager