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 :

Regexp avec un mot à ne pas matcher [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 165
    Points : 62
    Points
    62
    Par défaut Regexp avec un mot à ne pas matcher
    Bonjour,

    je cherche actuellement une regexp me permettant de matcher une phrase qui contient tout sauf un mot précis, \n et \r. J'avais pensé à qqchose du genre [^\n^\r^monmot]* ou [^\n^\r^(monmot)]* mais ceci ne fonctionne pas du tout

    Si quelqu'un a une idée... je suis preneur

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    ben !match

    et !preg_match

    quel est le but final ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 165
    Points : 62
    Points
    62
    Par défaut
    en fait dans une phrase du genre "40 ans à Frankfurt, mariée...", je veux matcher tout sauf "mariée..."

    pour le moment, j'ai "'#(Age (: )?)?[0-9]{2}[ ]?ans (à|a) [^\n^\r^\)^mariée]*#i';" mais le ^mariée n'est pas bon apparament

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    matcher ou remplacer ???

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 165
    Points : 62
    Points
    62
    Par défaut
    matcher
    en fait, je veux récupérer: "40 ans à Frankfurt" avec au pire le ", " en plus

  6. #6
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Ta méthode n'est pas bonne car l'utilisation de crochets définit des classes de caractères :
    permet de repérer une chaine de caractères contenant a, b, c, d, e ou f.
    permet de repérer une chaîne de caractères ne contenant ni a, ni b, ni c, ni d, ni e, ni f

    Par conséquent, et sous réserve que j'arrive bien à décrypter cette partie de ta regex...
    permet de repérer une chaîne de caractères ne contenant ni \, ni n, ni ^, ni \, ni r, ni ^, ni \, ni ), ni ^, ni m, ni a, ni r, ni i, ni é, ni e.

    Le traitement de \n et \r est, pour autant que je sache, ignoré dans les classes de caractères.

    Ce qui ne correspond pas à ce que tu cherches, en effet.

    En fait, le problème que tu cherches à résoudre malaisé à traiter avec une seule regex classique car les regex permettent de traiter des expressions régulières qui, comme leur nom l'indique, sont assujetties à des grammaires régulières, aussi dites de type 3 dans la [ame="http://fr.wikipedia.org/wiki/Hiérarchie_de_Chomsky"]hiérarchie de Chomsky[/ame]. Or, si je ne m'abuse, ton problème revient à l'utilisation d'une grammaire dépendante du contexte, de type 1 chez Chomsky (enfin... à vérifier tout de même...). Les regex ne traitent pas cela, du moins pas les regex pures. Certains langages ajoutent à leur bibliothèque de regex la possibilité de transgresser (partiellement) cette limitation : opérateurs contextuels et scripts enchâssés par exemple.

    PHP se contente ici de fournir des opérateurs contextuels appelés assertions. Si ton problème est soluble avec une regex, je pense que c'est par là qu'il faut regarder - tout en ayant au préalable corrigé la regex initiale pour l'alléger un peu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #(Age (:|: )?)?[0-9]{2}[ ]?ans (à|a) [^\n^\r^\)^mariée]*#i
    - [ ] correspond à quoi ? Un espace facultatif ? Alors utiliser : \s? ou, mieux, \s*, ou (espace)? (avec 'espace' qui vaut un blanc, bien sûr ^^). \s est plus puissant car il intercepte tout type de séparateur.
    - (: )? correspond à quoi ?
    - (Age (: )?)? correspond à quoi ? Tu veux capturer ces valeurs ou juste les ignorer car elles sont facultatives ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 165
    Points : 62
    Points
    62
    Par défaut
    '#(Age (: |: )?)?[0-9]{2}[ ]?ans (à|a) [^\n^\r]*#i';

    ma regexp correspond:
    - [ ] parce que je veux matcher uniquement les espaces ' ' et non tout ce qui est contenu dans \s
    - le correspond a ": |" sans espace parce que je cherche les bouts de phrases commencant par "Age:" ou "Age: "
    - pour le [^\n^\r]* et non ^\s* parce que je veux exclure uniquement les \n et \r et non les espaces

  8. #8
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Citation Envoyé par m0ul3sh0t Voir le message
    - le correspond a ": |" sans espace parce que je cherche les bouts de phrases commencant par "Age:" ou "Age: "
    Commençant par ? Alors :
    devrait faire l'affaire en indiquant expressément que la phrase doit commencer par...

    Citation Envoyé par m0ul3sh0t Voir le message
    - pour le [^\n^\r]* et non ^\s* parce que je veux exclure uniquement les \n et \r et non les espaces
    ne marche pas. Voir les options de regex pour le problème des sauts de ligne à ignorer.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 165
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par Herode Voir le message
    Commençant par ? Alors :
    devrait faire l'affaire en indiquant expressément que la phrase doit commencer par...
    en fait je me suis mal exprimé. Je ne veux pas que ca match une phrase commençant par "Age:" mais que le debut du matching commence par "Age:"


    Citation Envoyé par Herode Voir le message
    ne marche pas. Voir les options de regex pour le problème des sauts de ligne à ignorer.
    Qu'entends tu par les options de regex?

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    ben mets justeà la fin
    et rajout un u en modifier

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 165
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    ben mets justeà la fin
    et rajout un u en modifier
    merci beaucoup pour l'information

    qu'entends-tu par "rajouter un u en modifier"?

  12. #12
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 165
    Points : 62
    Points
    62
    Par défaut
    merci pour les info

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

Discussions similaires

  1. Mot de passe chiffré haché avec md5 ne fonctionne pas
    Par san1981 dans le forum Requêtes
    Réponses: 1
    Dernier message: 24/10/2011, 14h04
  2. RegExp - Ne pas matcher si
    Par Tiger-222 dans le forum Langage
    Réponses: 4
    Dernier message: 19/07/2011, 16h44
  3. Réponses: 4
    Dernier message: 30/12/2004, 18h04
  4. Menu CSS avec bordures - fonctionne firefox, pas ie
    Par Romalafrite dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 21/11/2004, 15h40
  5. probleme avec requete sql aime pas les strings
    Par lil_jam63 dans le forum Bases de données
    Réponses: 3
    Dernier message: 24/02/2004, 14h45

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