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 18/07/2011, 23h50   #1
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
Par défaut Trouver des mots clés avec une regex

bonjour
je cherche une astuce pour simplifier l'expression régulière suivante (qui fonctionne cependant):
Code :
'#(abstract|final|static|protected|public|private|)[ \t]*(abstract|final|static|protected|public|private|)[ \t]*(abstract|final|static|protected|public|private|)[ \t]*(abstract|final|static|protected|public|private|)[ \t]*function[ \t\n]+(&?[a-z0-9_]+)#i'
le contexte est simple, j'ouvre un fichier php et j'utilise ceci pour récuperer la liste des fonctions avec leur prototypes... et donc je peux très bien vouloir matcher
"function toto()" ou "static final public function titi()" ou les mots clés dans n'importe quel ordre ... l'interet et d'avoir une bonne approximation des fonctions/methodes déclarées dans un fichier même s'il ne se compile pas.

en général je cherche à récupérer un nombre indeterminé de plusieurs mots clés connus disposés dans un ordre aléatoire.

merci de votre aide.
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 00h57   #2
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
Bonsoir,

Je ne sais pas si j'ai bien compris ce que tu voulais exactement.

j'ai essayé ceci
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$texte= '
public static $mavar = "mavar";
 
public function getMaFunc1() {
	return 1;
}
 
public static function getMaFunc2($params1) {
	return 2;
}
 
function getMaFunc3($params3="3") {
	return 3;
}
 
';
 
$pattern="#([^\\s].+\\s)*function([^\\(].*)\\(.*#";
preg_match_all($pattern,$texte,$matches);
 
if(count($matches)) {
 
	$nb_fonctions= count($matches[0]);
	for($i = 0; $i < $nb_fonctions; $i++) {
		  echo "<p>la fonction <b>".$matches[2][$i]."</b> a les mots clés suivants : ".$matches[1][$i];
	}
}
peut-être voulais-tu séparer les mots clés en plus ?

__________________
http://cdemarche.developpez.com/

Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 01h16   #3
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
idéalement oui. je vais réfléchir à ta réponse parce que je comprends pas tout intuitivement.
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 02h42   #4
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
j'hésite entre
Code :
'#(?:(?>(abstract)|(protected)|(private)|(static)|(public)|(final))\s+){0,5}function\s+(\w+)\s*\(#i'
et
Code :
'#(?:(?:(abstract)|(protected)|(private)|(static)|(public)|(final))\s+){0,5}function\s+(\w+)\s*\(#i'
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 02h44   #5
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
pour mémoire voici le texte démo:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public static $mavar = "mavar";
const piege = 0;
 
final function getMaFunc1() {
	return 1;
}
 
protected static final function getMaFunc2
              ($params1) {
	return 2;
}
 
abstract protected function getMaFunc3($params3="3") {
	return 3;
}
 
protected      abstract  function getMaFunc3b($params3="3") {
	return 3;
}
 
function getMaFunc4(         ){
}
 
abstract private function foobar 
( $blablabla = null ){}
 
$anonymous = function ()
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 09h59   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 108
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 108
Points : 8 457
Points : 8 457
pour parser du PHP c'est avec le Tokenizer et/ou avec Reflection
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 10h49   #7
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
je veux pas parser le code, je veux être capable d'avoir une approximation qui réussi lorsque le code "compile" ou non.

Parce que sinon je pourrai aussi compiler le fichier et l'executer et regarder quelle est la classe qui a été définie et quelles sont les méthodes à utiliser.

En plus pour moi c'est l'occasion de m'améliorer sur l'écriture des regex, parce que je ne comprend pas pourquoi les résultats sont comme ils sont...
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 10h59   #8
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
du coup j'ai oublié un truc que j'utilise jamais
http://fr.php.net/manual/fr/language...ces.return.php

du coup ça devient...
Code :
'#(?:(?>(abstract)|(protected)|(private)|(static)|(public)|(final))\s+){0,5}function\s+(&?\w+)\s*\(#i'
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 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 13h19.


 
 
 
 
Partenaires

Hébergement Web