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 10/02/2011, 10h39   #1
apt
Membre du Club
 
Inscription : mai 2002
Messages : 526
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 526
Points : 42
Points : 42
Par défaut Regexp sur une BDD

Bonjour à tous,

Dans un forum, j'ai trouvé cette question intéressante et sans réponse :

Comment puis-je récupérer une portion d'informations depuis un champ info qui contient cette chaine :

Paul|0552578912|Paul2002@yahoo.fr

Pour les cas suivants :

1 - Les noms.
2 - Le numéro de téléphone.
3 - l'email.

Merci.
apt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 11h02   #2
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
deux solutions, soit tu récupères toute la colonne et tu la traites dans un langage de programmation, soit tu vais un sql compliqué parce que mysql ne gère pas les parenthèses capturantes.
__________________
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 10/02/2011, 11h09   #3
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 peux créer une fonction qui va découper ta chaine sur tes séparateurs |

La ou je travaille, on a créé une fonction SQL serveur qui découpe les chaines en fonction d'un caractère que l'on lui passe en paramètre. En utilisant les fonction SQL sur les chaines (substring, len, etc...)

Sinon il existe bien des Regex sur la plupart des systèmes de base de données mais je ne suis pas sur qu'elles permettent "d'extraire" un bout de chaine.
Ce qui est sur c'est qu'elle permettent de renvoyer vrai ou faux pour savoir si une chaine match bien avec ton regex.
__________________
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 11/02/2011, 16h50   #4
apt
Membre du Club
 
Inscription : mai 2002
Messages : 526
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 526
Points : 42
Points : 42
Seb33300,

Pourrais-je avoir le code de cette fonction SQL ?

Merci.
apt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 17h02   #5
Membre expérimenté
 
Inscription : mai 2006
Messages : 501
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : mai 2006
Messages : 501
Points : 576
Points : 576
Bonjour,

Ne serait-ce pas plus simple de faire ça en php avec un simple explode ?
Ou peut-être ai-je mal compris le problème...
Fabllot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 17h48   #6
apt
Membre du Club
 
Inscription : mai 2002
Messages : 526
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 526
Points : 42
Points : 42
Citation:
Envoyé par Fabllot Voir le message
Bonjour,

Ne serait-ce pas plus simple de faire ça en php avec un simple explode ?
Ou peut-être ai-je mal compris le problème...
Dans ce cas, tout les champs de la table seront récupérer, puis un traitement général du résultat sera lancer
apt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 17h55   #7
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 015
Points : 5 015
Citation:
La ou je travaille, on a créé une fonction SQL serveur qui découpe les chaines en fonction d'un caractère que l'on lui passe en paramètre. En utilisant les fonction SQL sur les chaines (substring, len, etc...)
Citation:
Comment puis-je récupérer une portion d'informations depuis un champ info qui contient cette chaine :

Paul|0552578912|Paul2002@yahoo.fr
Aïe, vous êtes pas 1NF !

Citation:
Dans ce cas, tout les champs de la table seront récupérer, puis un traitement général du résultat sera lancer
Ce qui n'est pas nécessairement plus lent. A toi de faire un benchmark pour évaluer quelle option est la meilleure.

Je passais juste vous avertir que l'emploi de fonction de regexp au niveau de la base de données était très très lent ! Il à été démontré que PHP s'en sors mieux pour filtrer des données par regexp que MySQL.

Par ailleurs, PHP vous offre gracieusement preg_grep et preg_filter, autant s'en servir

D'une manière générale, il est recommandé de suivre les formes normales pour modéliser une base de données optimale en termes de lectures / ecritures: http://fr.wikipedia.org/wiki/Forme_n...ationnelles%29
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 19h19   #8
Membre Expert
 
Inscription : septembre 2010
Messages : 1 239
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 239
Points : 1 561
Points : 1 561
Entièrement d'accord avec Benjamin Delespierre.

Tu ne devrais pas avoir à te poser cette question. Si tu te la pose c'est que ta table n'est pas conçue correctement.
Donc dans ce cas c'est le schéma de la table qui est à revoir sinon la recherche et la récupération des données sera un gouffre à performance...
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB 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 11h42.


 
 
 
 
Partenaires

Hébergement Web