-
Usage de preg_match
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
-
Salut,
avec les Regex il est tout à fait possible de tester toute la chaine dans son intégralité en débutant ton pattern par ^ et en le terminant par $
Après le choix du match ou du non match dépend d'un peu de ton bon vouloir.
Il n'y a pas de règle généralisable. Prend le regex le plus simple à écrire et à lire.