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 :

Écrire une regexp


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Webdesigner
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Par défaut Écrire une regexp
    Bonjour !

    Je veux extraire d'un très long texte des éléments qui y sont toujours présentés de la même manière.
    Donc, je voudrais savoir comment écrire et utliser une regexp qui répondrait au modèle (pattern) suivant :

    - un premier groupe de caractères (pouvant comporter, outre des lettres : un ou des espaces le(s)quel(s) toujours suivi(s) d'une lettre et comportant aussi, éventuellement, une ou des apostrophes ainsi que un ou des tirets mais jamais de chiffres)
    - un espace toujours suivi d'un chiffre (bon repère médian, comme une sorte de "delimiter")
    - un second groupe de caractères (chiffres et tiret (et/ou un point d'interrogation sur les modèles suivants : 1234-5678 ou 1234-?)

    Exemples :

    Saint-Denis l'Église 1234-?

    ou

    L'Arbresle-sur-le-Lac 2345-6789

    Cette regexp serait utilisée dans un script PHP, pour extraire les éléments d'un texte réparti dans les multiples rangées d'une colonne de table MySQL.

    Merci d'avance pour votre aide et/ou vos explications !

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu aurais pu essayer quelque chose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #([[:alpha:]-\'\s]+) ([0-9]+)-([0-9]+|\?)#
    même une version laxiste peut répondre à ton besoin
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Homme Profil pro
    Webdesigner
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Par défaut
    Merci beaucoup, "sabotage" !

    Je viens juste de commencer à apprendre sur le site http://www.expreg.com/
    et je vais déchiffrer ce que tu me proposes.

    Vois-tu, j'aime comprendre ce que j'utilise...

    :-)

    Petite question :
    Sur le site de MySQL, ils disent utiliser les POSIX alors que partout on conseille les PCRE.
    Comme je suis un parfait novice, comment choisir ?

  4. #4
    Membre averti
    Homme Profil pro
    Webdesigner
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu aurais pu essayer quelque chose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #([[:alpha:]-\'\s]+) ([0-9]+)-([0-9]+|\?)#
    Bonjour !

    J'ai testé le code dans phpMyAdmin avec une requête SQL,
    j'ai obtenu un message d'erreur :
    #1139 - Got error 'invalid character range' from regexp

    Pourtant, j'ai testé ([[:alpha:]-\É\é\è\'\s]+) ([0-9]+)-([0-9]+|\?) avec l'outil fourni par eric69 http://www.google.com/url?q=http%3A%...RnkhKpZbX-6-Kg et ça fonctionne.
    (regexp modifiée pour prendre en compte les lettres accentuées pouvant être rencontrées car l'original les ignorait)

    Y'a un os quelque part...

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Met [a-zA-Z] au lieu de [:alpha:] alors
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre averti
    Homme Profil pro
    Webdesigner
    Inscrit en
    Janvier 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2013
    Messages : 48
    Par défaut
    Ça ne change que le message d'erreur :
    #1139 - Got error 'repetition-operator operand invalid' from regexp
    Ma requête :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ID, longName, notes
    FROM `_a_listregex`
    WHERE notes REGEXP '([[a-zA-Z]-\'\s]+) ([0-9]+)-([0-9]+|\?)'
    ORDER BY ID

  7. #7
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    oui car c'est du posix et surtout une chaine simple...
    essaye de doubler le \ devant ?
    car quand tu envoie la requête via php elle est echappée... du coup, il interprète le ? comme un répétiteur (équivaut à {0,})...

  8. #8
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    salut,

    avec l'api preg_xxx (car ça change le codage de certains trucs sinon):
    si tu veux les nombres de l'expression:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    "`([0-9]{4})\-([0-9]{4})|\?`"

    `` délimite le motif derrière tu peux mettre des options pour la casse, etc...

    () délimite une saisie (retournée dans le tableau en sortie de la fonction) mais sert aussi à définir une priorité niveau opérateur (un groupe)

    \ permet d'échapper les caractères ayant un sens particulier au niveau du motif pour les utiliser comme des caractères normaux

    {x} ou {x,y} nombres définissant la répétition attendue du caractère ou groupe précédent
    ? correspond à {0,} c'est à dire présence possible
    [a-zA-Z0-9\?] défini un ensemble de caractère pour le caractère courant
    [^a-zA-Z0-9\?] définit un ensemble de caractères interdits pour le caractère courant

    tu peux mettre des ancres:
    • `^ début de chaine
    • $` fin de chaine


    voilà un résumé rapide, je t'invite à lire la doc et tu trouveras moult cours en parlant

    dans php n'utilise que des preg_..., les erg_... vont disparaitre

    un outil en ligne pour tester: ici

    dedans tu mets ce qu'il y a entre les ``, ici:
    ([0-9]{4})\-([0-9]{4})|\?

Discussions similaires

  1. [Regex]Match d'une regexp avec une chaîne avec caractères spéciaux
    Par gdawirs dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 25/11/2005, 12h24
  2. Comment écrire une très longue variable dans un fichier ?
    Par hijodelanoche dans le forum Langage
    Réponses: 8
    Dernier message: 17/11/2005, 16h12
  3. [C#][xml][regexp] Recherche d'une regexp dans un fichier xml
    Par LeJocker dans le forum Windows Forms
    Réponses: 4
    Dernier message: 18/10/2005, 12h29
  4. [Regexp] Obtenir une regexp à partir du texte ?
    Par Alec6 dans le forum Langage
    Réponses: 1
    Dernier message: 12/09/2005, 16h40
  5. écrire une DTD pour un article
    Par VincentMetz dans le forum Valider
    Réponses: 4
    Dernier message: 19/07/2004, 11h32

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