Bonjour,
Ta RE est [a-zA-Z\\040\\[\\]]
La volonté d’attraper la valeur NULL comme tu veux le faire est une drôle d’idée à mon avis.
D’après ce que j’ai compris, NULL est une valeur “solitaire“ : NULL ne peut pas partager une variable avec quoi que ce soit d’autre. Même une variable $ch à laquelle on a assigné une chaîne vide $ch = '' n’a pas la valeur NULL.
Donc je pense (j’espère) que ton idée avec ta RE, c’est de pouvoir détecter
- soit une valeur non NULL d’une variable de type chaine; dans ce cas, ce seront les caractères [a-zA-Z[\\]] qui seront actifs pour la recherche
- soit la valeur NULL toute seule, comme si la RE était \\040\\
En tant que non spécialiste de PHP, je me fais deux réflexions:
- la valeur NULL est elle représentable par un chaîne de caractères litérale ? la chaîne ’\040\’ est elle cette chaîne litérale ? à quoi correspond la succession de chiffres 040 ? ça ressemble à une valeur d’octet. La valeur NULL a-t-elle donc une certaine valeur d’octet ? C’est bien obscur pour moi.
- le principe me semble tordu a la base.
Pourquoi ne pas chercher indépandamment si la variable a la valeur NULL ?
if(!$tab_partie_02[0][$b]=NULL) and (!preg_match_all("#[a-zA-Z[\\]]#", $tab_partie_02[0][$b], $test))
cette ligne est sans doute mal écrite, mais c’est pour donner l’idée.
Cependant, si NULL peut vraiment être représentée par une chaîne litérale de caractères ’\040\’ et que tu veuilles vraiment faire participer celle-ci à une RE, je ne vois pas comment la mettre au sein d’une classe entre crochets car il ne me semble pas possible de faire considérer au sein d’une classe que 7 caractères successifs \\040\\ symbolisent un seul caractère.
Je veux dire qu’en dehors d’une classe on pourrait mettre entre parenthèses (?:\\040\\) , mais au sein d’un classe je ne vois pas comment c’est possible
Donc il faut écrire à mon avis
if(!preg_match_all("#\\040\\|[a-zA-Z[\\]]*#", $tab_partie_02[0][$b], $test))
Soit dit en passant, remarquer l’étoile * que j’ai ajoutée
Partager