Expression regulière

Fermé
Najahp - 14 janv. 2009 à 13:00
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 - 15 janv. 2009 à 19:27
Bonjour,

je souhaite extraire le contenu qui se trouve entre deux parenthèse par une expression regulière

voilà j'ai une chaine qui peut s'ecrire de deux façon

$chaine_1 ="fonction nom_fonction($par1, $par=null, $par=null) ";
$chaine_2 ="fonction nom_fonction() ";
je souhaite avoir dans un tableau :

nom_fonction
$par1
$par2,
$par3


Merci d'avance

12 réponses

Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
14 janv. 2009 à 13:03
salut,

et ?…

<edit>

et qu'as-tu fait jusqu'à présent, quel est ton problème ?

</edit>
0
najap Messages postés 11 Date d'inscription mercredi 14 janvier 2009 Statut Membre Dernière intervention 23 avril 2009
14 janv. 2009 à 16:06
Salut,

en effet ma question est la suivante
j'ai besoin d'une expression régulier en php qui permet d'extraire de la chaine $x le contenu $y
tel que

$x = "fonction nom_fonction($par1, $par=null, $par=null) ";

$y = nom_fonction, $par1, $par2, $par3 ;

Merci d'avance
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
14 janv. 2009 à 16:16
alors, de tête et en fermant les yeux…
`^function\s[.*]([.*])$`

comme ça tu devrais récupérer le nom de la fonction et la chaine des variables que tu peux après éclater avec split().
mais je ne suis pas sûr pour les parenthèses.

essaie déjà ça je regarde pour les parenthèses et extraire aussi les variables.

tu veux juste disséquer la chaîne, tu ne veux pas faire de réflexion ?
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
14 janv. 2009 à 16:33
les parenthèses sont bien des métacaractères, le $ aussi.

essaie :
`^function\s[.+]\(\$[.+],\s\$[.+],\s\$[.+])$`
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
najap Messages postés 11 Date d'inscription mercredi 14 janvier 2009 Statut Membre Dernière intervention 23 avril 2009
14 janv. 2009 à 16:54
Merci Mathieu, mais c'est pas ça exactement ce que je souhaite
je souhaite me débarrasser des deux parenthèse et comme résultat c'est soit un tableau
ou bien une chaine dont les éléments soit séparé par une virgule.

Input = "fonction nom_fonction($par1, $par=null, $par=null) ";

output = "nom_fonction, $par1, $par2, $par3 ";

Cordialement
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
14 janv. 2009 à 17:02
c'est bien ce que j'avais compris…

tu l'utilises comme ton expression régulière ?
en utilisant preg_match() et l'expression tu devrais avoir un tableau avec les infos.

+ preg_match()
0
najap Messages postés 11 Date d'inscription mercredi 14 janvier 2009 Statut Membre Dernière intervention 23 avril 2009
14 janv. 2009 à 17:24
Salut,

Afin de tester votre solution, voila un exemple que j'ai fait
et malheuresement ça marchait pas

$function_elements = array() ;
$chaine = 'function Param($pl_idelm,$mandt = false,$default =
null,$iname = null)';
preg_match('^function*[.+]($[.+],$[.+],$[.+])$', $chaine, $function_elements);
foreach($function_elements as $key => $value)
{

echo $value ;
}

Bien Cordialement
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
14 janv. 2009 à 17:38
essaie juste :

preg_match('^function [.+]([.*])$', $chaine, $function_elements); 
print_r($function_elements)

0
najap Messages postés 11 Date d'inscription mercredi 14 janvier 2009 Statut Membre Dernière intervention 23 avril 2009
14 janv. 2009 à 17:49
Salut,

je reçois ce message d'erreur.

Warning: preg_match() [function.preg-match]: No ending delimiter '^' found in C:\Program Files...........

Merci
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
14 janv. 2009 à 18:16
oups…

il lui fait ses délimiteurs à lui…
moi j'utilise les accents graves mais je les avais oublié.
preg_match('`^function [.+]([.*])$`', $chaine, $function_elements); 
print_r($function_elements)
0
najap Messages postés 11 Date d'inscription mercredi 14 janvier 2009 Statut Membre Dernière intervention 23 avril 2009
15 janv. 2009 à 15:03
Merci bcp :)
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
15 janv. 2009 à 19:27
salut,

ça fonctionne ?
0