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 27/07/2011, 13h09   #1
Membre habitué
 
Avatar de tintin72
 
Inscription : septembre 2003
Messages : 595
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 595
Points : 123
Points : 123
Par défaut Début et fin de chaine optionnel ?

Bonjour,

Je n'arrive pas a créer une regex qui soit capable de matcher un nombre dans une chaine comme celle-ci:
Citation:
45;69;2;84;78;4
J'ai essayé ça:
Code :
preg_match("#;?4;?#", $chaine);
Mais si par exemple je veux matcher le nombre 4,
il matche 4 mais aussi le 4 de 45 et celui de 84

Ce que je veux faire c'est une regex qui reconnait un motif qui:
peut se trouver en début de chaine OU être précédé de ; et/ou peut se trouver en fin de chaine OU être suivi de ;

J'ai fait plusieurs essaies mais je tourne en rond.

Quelqu'un pourrait m'aider ?


Merci.
tintin72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 13h11   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
explode + in_array ?

Le masque est faux, c'est sûr qu'en rendant les point-virgules facultatifs, vous allez matcher un 4 situé n'importe où. /(?:^|;)4(?:;|$)/ ?

FALSE !== strpos(';' . $in . ';', ';4;'); ?
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 13h46   #3
Membre habitué
 
Avatar de tintin72
 
Inscription : septembre 2003
Messages : 595
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 595
Points : 123
Points : 123
est presque bon sauf qu'il inclue les points virgule,
mais je n'arrive pas à trouver la modif pour qu'il ne prenne que le nombre.

Une idée ?
tintin72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 13h54   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 118
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 118
Points : 8 467
Points : 8 467
utilise ce que ta dit julp, explode + in_array
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 13h57   #5
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par tintin72 Voir le message
est presque bon sauf qu'il inclue les points virgule,
mais je n'arrive pas à trouver la modif pour qu'il ne prenne que le nombre.
Comment ça ? C'est gênant de retrouver le(s) ; dans la capture 0 ? Si c'est le cas : assertions positives (/(?<=^|;)4(?=;|$)/) ou capture ?

Mais donner le contexte aurait pu être utile ...
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 14h04   #6
Membre habitué
 
Avatar de tintin72
 
Inscription : septembre 2003
Messages : 595
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 595
Points : 123
Points : 123
Citation:
Comment ça ? C'est gênant de retrouver le(s) ; dans la capture 0 ?
Oui, en fait c'est une regex que je doit utiliser dans une requête MySQL donc je préfère avoir le "matching" exacte.
Sinon:
fonctionne parfaitement.
Je vais maintenant essayer de comprendre ce que fait exactement cette regex histoire de ne pas copier/coller bêtement.

Merci.
tintin72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 14h06   #7
Modérateur
 
Inscription : septembre 2010
Messages : 7 118
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 118
Points : 8 467
Points : 8 467
Citation:
Envoyé par tintin72 Voir le message
Oui, en fait c'est une regex que je doit utiliser dans une requête MySQL donc je préfère avoir le "matching" exacte.
Sinon:
fonctionne parfaitement.
Je vais maintenant essayer de comprendre ce que fait exactement cette regex histoire de ne pas copier/coller bêtement.

Merci.
et l’intérêt par rapport un explode a part se compliquer la vie c'est quoi ?
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 14h11   #8
Modérateur
 
Avatar de Bisûnûrs
 
Josselin
Développeur Web
Inscription : janvier 2004
Messages : 9 050
Détails du profil
Informations personnelles :
Nom : Josselin
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : janvier 2004
Messages : 9 050
Points : 12 181
Points : 12 181
Et simplement :
Bisûnûrs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 14h14   #9
Modérateur
 
Inscription : septembre 2010
Messages : 7 118
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 118
Points : 8 467
Points : 8 467
Citation:
Envoyé par Bisûnûrs Voir le message
je sais pas si mysql a les mêmes classes que PCRE
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 15h00   #10
Membre habitué
 
Avatar de tintin72
 
Inscription : septembre 2003
Messages : 595
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 595
Points : 123
Points : 123
Citation:
et l’intérêt par rapport un explode a part se compliquer la vie c'est quoi ?
Je ne sais pas comment utiliser explode dans une requête du type:
Code :
$query = 'SELECT * FROM matable WHERE champ REGEXP "(?<=^|;)'.$motif.'(?=;|$)"';
Sinon je me demandais s'il existait une regex qui représente "aucun caractère"
(le contraire du point en fait) ?
tintin72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 15h02   #11
Modérateur
 
Inscription : septembre 2010
Messages : 7 118
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 118
Points : 8 467
Points : 8 467
t'as pas a faire ça dans un SGBD, tu doit faire un table de correspondance, je te conseil de revoir ton schéma, que de faire de la bidouille
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 15h17   #12
Membre habitué
 
Avatar de tintin72
 
Inscription : septembre 2003
Messages : 595
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 595
Points : 123
Points : 123
Dans mon cas une table de correspondance serait un peu lourd à gérer. En quoi le fait de récupérer une donnée via une regex dans MySQL pose problème ?
tintin72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 15h32   #13
Modérateur
 
Inscription : septembre 2010
Messages : 7 118
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 118
Points : 8 467
Points : 8 467
Citation:
Envoyé par tintin72 Voir le message
Dans mon cas une table de correspondance serait un peu lourd à gérer. En quoi le fait de récupérer une donnée via une regex dans MySQL pose problème ?
parce que c'est contre le principe d'une base de donnée, c'est comme si tu disais :
En quoi me servir de ma voiture comme tracteur pose problème ?
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2011, 13h56   #14
Membre habitué
 
Avatar de tintin72
 
Inscription : septembre 2003
Messages : 595
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 595
Points : 123
Points : 123
Ok, merci.
J'ai revu mon schéma.
tintin72 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 15h18.


 
 
 
 
Partenaires

Hébergement Web