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 19/10/2011, 22h07   #1
Invité de passage
 
Inscription : mai 2009
Messages : 5
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 5
Points : 0
Points : 0
Par défaut Extraire nom, prénom et email - preg_match_all

Salut à tous,
J'ai besoin d'une petite aide.
Je veux extraire les mots "Jony", "Smith" et "example-free@wpdevelop.com" de cette ligne:

Citation:
text^name1^Jony~text^secondname1^Smith~text^email1^example-free@wpdevelop.com~
J'ai fait comme ça: preg_match_all ('/\^(.*?)\~/', $row['form'], $res);

Et j'obtiens ça pour le prénom: ^name1^Jony~
pour le nom: ^secondname1^Smith~
etc.

Il n'y a que le mot "text" qui disparait. Pourriez-vous me dire ce qui ne vas pas dans mon expression régulière?

Merci beaucoup
araqh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 03h30   #2
Membre Expert
 
Avatar de Seb33300
 
Homme Sébastien Alfaiate
Développeur Web
Inscription : janvier 2007
Messages : 1 329
Détails du profil
Informations personnelles :
Nom : Homme Sébastien Alfaiate
Âge : 26
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2007
Messages : 1 329
Points : 1 657
Points : 1 657
Tu demandes à chercher une chaine comprise entre les caractères ^et ~.

Par défaut, la regex va chercher la plus grande chaîne possible qui correspond à cette recherche, ce qui est le cas pour ^name1^Jony~

Pour résoudre le problème, il suffit de dire que la chaîne que tu recherches ne doit pas contenir de ^

Code :
preg_match_all('/\^([^\^\.]*?)\~/', $row['form'], $res);
__________________
Zend Certified Engineer PHP 5.3

« Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana
Seb33300 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 18h45   #3
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 664
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 664
Points : 5 390
Points : 5 390
Autre possibilité : utiliser le modificateur U (ungreedy) qui te retournera la plus petite expression possible.
Code :
preg_match_all ('/\^(.*?)\~/U', $row['form'], $res);
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 18h49   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 186
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 186
Points : 8 562
Points : 8 562
ça sort d’où ta chaine ?
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 09h56   #5
Modérateur
 
Avatar de s.n.a.f.u
 
Homme
Développeur Web
Inscription : août 2006
Messages : 2 700
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : août 2006
Messages : 2 700
Points : 3 357
Points : 3 357
Citation:
Envoyé par stealth35 Voir le message
ça sort d’où ta chaine ?
C'est vrai qu'on dirait qu'elle est construite spécialement pour complexifier une regex d'extraction...

Mais tu peux essayer ça :

Code :
1
2
3
4
5
6
<?php
$str = 'text^name1^Jony~text^secondname1^Smith~text^email1^example-free@wpdevelop.com~ ';
 
preg_match_all('/ \^ [^\^]+ \^ ([^~]+) ~ /x', $str, $match);
 
var_dump($match[1]);
__________________
  • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
  • Merci d'utiliser les balises de code (# dans l'éditeur)
  • Si votre problème est réglé, merci d'utiliser le bouton
S.N.A.F.U
s.n.a.f.u est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h20.


 
 
 
 
Partenaires

Hébergement Web