IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

preg_split et backslash [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Belegkarnil
    Inscrit en
    Juin 2005
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juin 2005
    Messages : 289
    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

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_split('#(?<!\\\\)\\.#', $texte) ;

  3. #3
    Membre éclairé Avatar de Belegkarnil
    Inscrit en
    Juin 2005
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juin 2005
    Messages : 289
    Par défaut
    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.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #((?<!\\)\.|\\\\\.)#

    Ce qui devrait donner :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    preg_split('#((?<!\\\\)\\.|\\\\\\\\\\.)#', $texte)

  5. #5
    Membre éclairé Avatar de Belegkarnil
    Inscrit en
    Juin 2005
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Juin 2005
    Messages : 289
    Par défaut
    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?

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    #((?<!\\)(\\\\)*\.)#

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP] ajout de backslash auto lors d'un ajout en DB
    Par FraktaL dans le forum Langage
    Réponses: 16
    Dernier message: 20/06/2006, 16h00
  2. incidence du backslashe dans une chaine
    Par rogerio dans le forum C++
    Réponses: 7
    Dernier message: 01/06/2006, 09h57
  3. [RegEx] Preg_split decoupage de chaine
    Par Dargos dans le forum Langage
    Réponses: 6
    Dernier message: 10/04/2006, 10h32
  4. Backslash et apostrophe
    Par Space Cowboy dans le forum Requêtes
    Réponses: 8
    Dernier message: 26/11/2005, 19h43
  5. Replace d'un backslash
    Par MiJack dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 25/10/2005, 11h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo