RegExp - Ne pas matcher si
Bonjour à tous,
J'écris un parseur de fichiers (ou depuis STDIN) PHP afin d'y extraire les fonctions utilisées pour enfin vérifier qu'elles ne sont pas obsolètes.
Donc le script est fonctionnel à ceci près qu'il matche toutes les fonctions, même celles définies par l'utilisateur (du coup pas moyen de vérifier en ligne si elles sont obsolètes...).
De plus je ne souhaite pas matcher les fonctions d'une classe tel que $this->function ou (...)->fonction.
Voici la regexp qui trouve toutes les fonctions :
Code:
my $regexp = '([\w]{4,})[\s]{0,}\(.*\)';
Dans un premier temps pour ne pas sélectionner les fonctions d'une classe, j'ai testé :
Code:
my $regexp = '((?!>)[\w]{4,})[\s]{0,}\(.*\)';
Alors je crois bien ne pas avoir bien saisi le fonctionnement de (?!), pourtant j'ai bien lu http://search.cpan.org/~rgarcia/perl-5.9.4/pod/perlretut.pod
J'ai réussi en trichant un peu, je matche ausi les signes - et > puis je procède à une 2ème vérification, càd :
Code:
1 2 3 4
| my ($ff) = $_ =~ m/$regexp/i;
if ( defined $ff && $ff !~ m/>/ ) {
(...)
} |
Idem il faudrait que je ne matche pas quand la fonction est précédée de "function ".
Y a-t-il une solution en une seule regexp ?
Merci d'avance :)