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 01/03/2008, 11h58   #1
Membre actif
 
Avatar de Belegkarnil
 
Inscription : juin 2005
Messages : 289
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : juin 2005
Messages : 289
Points : 159
Points : 159
Par défaut preg_split et backslash

Bonjour, j'ai un problème et je crois que je peux le résoudre avec les RegEx...
Je crée un syntaxe donc les opérations sont séparées par des . mais il faudrait pouvoir ne pas séparer si il y a un \. Donc je dois aussi doubler les \. Comment savoir si il y a un nombre pair/imprair de \ devant un .?

Je découpe avec preg_split.
Donc par exemple opération1.opération2 avec opération 1 contenant \. qui permettrait de ne pas découper l'opération1 en deux opérations...

Merci
Belegkarnil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2008, 21h50   #2
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Il faut utiliser une asserion arrière négative. La regex serait celle-là :

donc en PHP, il faut l'écrire en doublant les backslashes :
Code PHP :
preg_split('#(?<!\\\\)\\.#', $texte) ;
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2008, 07h39   #3
Membre actif
 
Avatar de Belegkarnil
 
Inscription : juin 2005
Messages : 289
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : juin 2005
Messages : 289
Points : 159
Points : 159
Merci ;-)
J'avais apparemment un problème puisque je ne doublais pas pas les backslash pour php. Mais il y a encore un problème. Si on a op1.op2 avec op1 qui se termine par \\ (doublement de backslash pour le différentier de \.) comme cela, il faut séparer op1 et op2.
Belegkarnil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2008, 10h09   #4
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Donc le sérateur est soit un point non précédé d'un backslash, soit un point précédé de deux backslahes :
Code regex :
1
2
 
#((?<!\\)\.|\\\\\.)#

Ce qui devrait donner :
Code php :
1
2
 
preg_split('#((?<!\\\\)\\.|\\\\\\\\\\.)#', $texte)
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2008, 06h15   #5
Membre actif
 
Avatar de Belegkarnil
 
Inscription : juin 2005
Messages : 289
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : juin 2005
Messages : 289
Points : 159
Points : 159
Merci ;-)
Mais y a t'il moyen de dire que si le point est précédé de 2n backslash alors il sépare et si c'est 2n+1 backslash alors il ne sépare pas? Parce que là, on doit spécifier la nombre de backslashs?
Belegkarnil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2008, 04h19   #6
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Alors disons les choses autrement : c'est un point précédé d'un nombre quelconque (ou zéro) de paires de backslashes, elles-mêmes non-précédées d'un backslash isolé :
Code regex :
#((?<!\\)(\\\\)*\.)#
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2008, 06h16   #7
Membre actif
 
Avatar de Belegkarnil
 
Inscription : juin 2005
Messages : 289
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : juin 2005
Messages : 289
Points : 159
Points : 159
Exactement.
Merci beaucoup ;-)
Belegkarnil 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 07h59.


 
 
 
 
Partenaires

Hébergement Web