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 :

Début et fin de chaine optionnel ? [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    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:
    45;69;2;84;78;4
    J'ai essayé ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    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;'); ?

  3. #3
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    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 ?

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    utilise ce que ta dit julp, explode + in_array

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    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 ...

  6. #6
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    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.

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    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 ?

  8. #8
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Et simplement :

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Bisûnûrs Voir le message
    je sais pas si mysql a les mêmes classes que PCRE

  10. #10
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $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) ?

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    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

  12. #12
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    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 ?

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    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 ?

  14. #14
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Ok, merci.
    J'ai revu mon schéma.

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

Discussions similaires

  1. comment supprimer des espaces en début et fin de chaine
    Par thor76160 dans le forum Langage
    Réponses: 2
    Dernier message: 19/03/2010, 10h08
  2. [RegEx] début/fin de chaine en capture 0
    Par KOogar dans le forum Langage
    Réponses: 7
    Dernier message: 03/03/2009, 11h35
  3. [AJAX] IE coupe début et fin de chaine
    Par julien.63 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/07/2006, 17h39
  4. Supprimer les espaces en fin de chaine.
    Par KneXtasY dans le forum C
    Réponses: 5
    Dernier message: 26/12/2005, 10h33
  5. Suppression des blancs en fin de chaine
    Par Spyco dans le forum C
    Réponses: 4
    Dernier message: 22/12/2005, 15h13

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