Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/12/2007, 13h06   #1
Membre chevronné
 
Inscription : janvier 2006
Messages : 918
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 918
Points : 735
Points : 735
Par défaut Lister des patterns qui ne sont pas dans une liste

Bonjour

Je recherche à lister dans un fichier php les variables qui n'appartiennent pas à une certaine liste.
Pour lister les variables, facile :
Code :
1
2
3
$patterns = '#(\$.+) #Umi';
preg_match_all($patterns, $str, $foo);
print_r($foo);
Comment faire pour ne pas lister celles du tableau $bar ?
Je tiens à le faire dans l'expression régulière, car j'ai plus de 100 variables dont une grande majorité dans $bar au total, et j'atteins les limites des parenthèses capturantes.

Merci de votre aide.
guidav est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2007, 17h14   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 830
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 830
Points : 3 462
Points : 3 462
Citation:
Pour lister les variables, facile : ...
Cela ne prend pas en compte :

Code :
1
2
3
4
5
6
7
8
$foo = $bar[0] ; // <= à cause de l'espace après le .+ de ta regexp
$foo = "\$bar " ; // $bar n'est pas une variable
$foo = '$bar ' ; // Idem
// $bar (idem)
/*
    $bar (idem)
*/
// Et sûrement bcp d'autres cas que j'oublie
Plus des cas plus tordus rendant la var difficilement identifiable en une passe :

Code :
$foo = "...{$bar}..." ;
A ta place je laisserais tomber les regexps et j'utiliserais token_get_all( ) http://fr.php.net/tokenizer
Ensuite tu peux utiliser in_array( ), voire array_diff( ) pour récupérer les noms de variables qui t'intéressent
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2007, 18h14   #3
Membre chevronné
 
Inscription : janvier 2006
Messages : 918
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 918
Points : 735
Points : 735
Merci, j'ignorais l'existence de token_get_all( ). Après, c'est tout simple en effet avec in_array.
guidav est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h03.


 
 
 
 
Partenaires

Hébergement Web