Récupérer une ou plusieur occurrence : PHP
le_joker_fou
Messages postés
765
Date d'inscription
Statut
Membre
Dernière intervention
-
creadiff Messages postés 445 Date d'inscription Statut Membre Dernière intervention -
creadiff Messages postés 445 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voilà un exemple de chaine :
"Bonjour,
Votre nom est : %user.nom%
Votre prénom est : %user.prenom%"
Je voudrais récupérer les occurrences %user.nom% et %user.prenom% pour les traiter, or je ne vois pas comment faire.
J'ai essayé ceci : $Texte = eregi ("%(.*)%" , $corps, $Resultat);
Mais le résultat est le suivant : "user.nom% Votre prénom est : %user.prenom"
Si quelqu'un a une idée je suis preneur.
Merci d'avance.
Voilà un exemple de chaine :
"Bonjour,
Votre nom est : %user.nom%
Votre prénom est : %user.prenom%"
Je voudrais récupérer les occurrences %user.nom% et %user.prenom% pour les traiter, or je ne vois pas comment faire.
J'ai essayé ceci : $Texte = eregi ("%(.*)%" , $corps, $Resultat);
Mais le résultat est le suivant : "user.nom% Votre prénom est : %user.prenom"
Si quelqu'un a une idée je suis preneur.
Merci d'avance.
A voir également:
- Récupérer une ou plusieur occurrence : PHP
- Recuperer message whatsapp supprimé - Guide
- Comment recuperer une video sur youtube - Guide
- Récupérer mon compte facebook désactivé - Guide
- Comment récupérer un compte facebook piraté - Guide
- Impossible de récupérer mon compte gmail - Guide
2 réponses
Salut,
un peu de théorie sur les RegExp : l'étoile * est gloutonne (greedy), c'est-à-dire qu'elle va essayer de capturer la plus grande portion de texte qui correspond au pattern. C'est pour ça que tu récupères tout ce qu'il y a entre le premier et le dernier %.
Pour la rendre non gloutonne (ungreedy ou encore lazy), il suffit de rajouter un point d'interrogation :
L'autre solution, plus optimisée, est d'interdire le symbole % dans le pattern :
;)
un peu de théorie sur les RegExp : l'étoile * est gloutonne (greedy), c'est-à-dire qu'elle va essayer de capturer la plus grande portion de texte qui correspond au pattern. C'est pour ça que tu récupères tout ce qu'il y a entre le premier et le dernier %.
Pour la rendre non gloutonne (ungreedy ou encore lazy), il suffit de rajouter un point d'interrogation :
$Texte = eregi ("%(.*?)%" , $corps, $Resultat);
L'autre solution, plus optimisée, est d'interdire le symbole % dans le pattern :
$Texte = eregi ("%([^%]*)%" , $corps, $Resultat);
;)
Pour récupérer toutes les occurrences, preg_match_all est plus pratique :
(en supposant que les paramètres que tu utilisent se trouvent dans $param)
Le "+" est plus adapté qu' "*", car il s'agit des occurrences où il y a au moins un caractère entre les "%".
preg_match_all("%([^%]+)%" , $corps, &$resultats); foreach ($resultats[1] as $resultat){ $corps = str_replace("%$resultat%", $param[$resultat], $corps); }
(en supposant que les paramètres que tu utilisent se trouvent dans $param)
Le "+" est plus adapté qu' "*", car il s'agit des occurrences où il y a au moins un caractère entre les "%".