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

Requêtes MySQL Discussion :

Comment utiliser les caractères &?@#*(){}[] dans un REGEXP ?


Sujet :

Requêtes MySQL

  1. #1
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut Comment utiliser les caractères &?@#*(){}[] dans un REGEXP ?
    Bonjour,

    Je voudrais récupérer toutes les lignes qui ont dans un champ un des caractères suivants : ?@#*(){}[]

    Pour se faire, j'ai le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM `adresses` WHERE `commune` REGEXP '[&?@#*(){}[]]+'
    Elle fonctionne (ne provoque pas d'erreur) mais ne retourne pas ce qu'elle devrait retourner.

    Je ne sais pas comment gérer ces caractères spéciaux.

    J'ai essayé avec ça '[&?@#*\(\)\{\}\[\]]+' mais ça ne marche pas mieux.

    Merci,
    ZiP

  2. #2
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 064
    Points
    19 064
    Par défaut
    Salut [ZiP].

    Quand tu n'arrives pas à sélectionner ce que tu veux, raisonne à l'envers, ne prends pas ce qui est valide.
    Je considère comme valide les caractères alphanumériques, le blanc et le !

    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from adresse where commune not regexp '^([[:alnum:][:blank:]!])*$'
    A consulter : http://dev.mysql.com/doc/refman/5.7/en/regexp.html

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  3. #3
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonsoir Artemus24,

    Effectivement, je vais travailler comme ça, c'est beaucoup plus simple à gérer !

    Merci,
    ZiP

  4. #4
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonsoir,

    J'ai avancé dans ma regex mais je bloque sur le "-".

    Celle-ci fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM `adresses` WHERE `commune` NOT REGEXP '^([[:alnum:][:blank:]''/])+$'
    Celle-là non (le tiret est ignoré) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM `adresses` WHERE `commune` NOT REGEXP '^([[:alnum:][:blank:]''/-])+$'
    J'ai vu dans la documentation qu'il fallait utiliser "hyphen", mais je ne sais pas comment l'utiliser car avec [[.hyphen.]] à la place de ' ça ne fonctionne pas non plus.

    Je dois ensuite accepter les "greater-than-sign".

    Merci pour votre aide,
    ZiP

  5. #5
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 064
    Points
    19 064
    Par défaut
    Salut [ZiP].

    C'est pourtant pas très compliqué à faire. Tu regardes le tableau afin de voir l'équivalent du caractère que tu cherches.
    Ici, le tiret se nomme "hyphen". Donc il faut ajouter ceci : [:hyphen:] !
    Ce qui donne le regex suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM `adresses` WHERE `commune` NOT REGEXP '^([[:alnum:][:blank:][:hyphen:]\'])+$'
    Je rappelle que le regex de php n'est pas celui de mysql, même s'il y a beaucoup de points communs entre les deux.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  6. #6
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonjour Artemus24,

    J'avais mis : [[.hyphen.]]

    Cependant, ça ne fonctionne pas avec [:hyphen:], j'ai le message d'erreur suivant :
    Got error 'invalid character class' from regexp
    Et si je mets ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM `adresses` WHERE `commune` NOT REGEXP '^([[:alnum:][:blank:][.hyphen.][.greater-than-sign.]/\'])+$'
    Je n'ai pas d'erreur mais le [.hyphen.] et le [.greater-than-sign.] sont ignorés.

    Merci,
    ZiP

  7. #7
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    phpMyAdmin semble gérer difficilement les résultats

    Tout est OK :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM `adresses` WHERE `commune` NOT REGEXP '^([[:alnum:][:blank:][.apostrophe.][.greater-than-sign.][.hyphen.][.slash.]])+$'
     
    SELECT * FROM `adresses` WHERE `voie` NOT REGEXP '^([[:alnum:][:blank:][.apostrophe.][.comma.][.hyphen.][.left-parenthesis.][.period.][.right-parenthesis.][.slash.]])+$'
    Merci,
    ZiP

  8. #8
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 064
    Points
    19 064
    Par défaut
    Salut [ZiP].

    Je pense que tu as compris le principe.
    Quant il s'agit d'un simple caractère, on reprend le nom anglais de ce caractère que l'on encadre entre des points comme ceci : [.comma.].
    Quand tu utilises un groupe de caractères, que l'on nomme ici une classe, cela s'encadre entre des points, comme ceci : [:alpha:].

    A oui, j'oubliai aussi, l'échappement, ce n'est pas un simple slash, mais deux qui se suivent.
    Exemple : \\+ sera interprété comme le caractère +. Et c'est équivalent à : [.plus-sign.].

    Il n'est pas toujours nécessaire de faire un regex. Tu peux aussi utiliser le like !
    Exemple : sélectionner les lignes ayant le caractères '+' : like '%+%'.

    La documentation à ce sujet est simple à comprendre.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  9. #9
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Merci pour ces précisions !

    Bon réveillon,
    ZiP

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

Discussions similaires

  1. Comment utiliser les datasets dans mon cas
    Par dachir dans le forum ASP.NET
    Réponses: 5
    Dernier message: 13/01/2009, 09h44
  2. Comment utiliser les taglib dans une page jsp?
    Par isicien dans le forum Struts 2
    Réponses: 1
    Dernier message: 02/01/2009, 11h36
  3. [XML]Comment utiliser les caractère étendus
    Par leminipouce dans le forum Langage
    Réponses: 2
    Dernier message: 31/10/2008, 14h59
  4. comment utiliser les lock dans les threads ?
    Par skad dans le forum Général Python
    Réponses: 2
    Dernier message: 15/07/2008, 14h28
  5. [JpGraph] Comment utiliser le caractère 'à' dans un texte ?
    Par [ZiP] dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 28/12/2007, 22h35

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