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 :

regexp


Sujet :

Requêtes MySQL

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut regexp
    salut,
    J'aurais une question concernant regexp:
    par exemple en BD, j'ai le prénom Aurélie,aurelie,AURELIE..
    je remplace les a et les e par .+
    du coup quand je fais la requete
    ça marche...
    le problème c'est que j'aimerais utiliser .{1,2} au lieu de .+ (equivalent de .{1,})
    est là ça ne me renvoie aucun resultat...pouvez-vous m'expliquez pourquoi?


    merci pour vos explication

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 293
    Par défaut
    Je ne sais pas quel test tu fais, mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select 'Aurélie' regexp '^.{1,2}ur.{1,2}li.{1,2}$' ;
    renvoie 1, et donc fonctionne.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut
    b'hein non c'est 0 chez moi...un problème de conf?
    pourtant ça l'air d'être possible:
    http://dev.mysql.com/doc/refman/5.0/fr/regexp.html

    Je ne comprends pas pourquoi ça ne marche pas.

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut
    ça marche sur mysql 5.0.21, 5.0.37, 5.0.45
    marche pas sur 5.0.15, 5.0.22, 5.0.24a...

    Donc si ça marche sur 5.0.21 et pas sur 5.0.22...c'est un pb de conf...mais quoi exactement...y'aurait-il quelque chose à activer?

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut
    sur les server mysql qui ne marchaient pas...ça renvoie 1 si on met 4 à la place de 2

    SELECT 'Aurélie' REGEXP '^.{1,4}ur.{1,4}li.{1,4}$' ;
    j'ai vu sur un site que c'était un pb de collation
    mais en mettant dans my.cnf
    character-set-server = utf8
    collation-server = utf8_unicode_ci
    ça ne marche pas +...

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut
    J'ai vu une astuce ici:
    http://forums.mysql.com/read.php?20,...945#msg-148945
    j'ai posté ici:
    http://forums.mysql.com/read.php?20,...444#msg-188444

    grâce à l'astuce du post:

    en php je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    	$toReplaceutf8 = array("a","à","á","â","ã","ä","å",
    							"e","é","è","ê","ë",
    							"o","ò","ó","ô","õ","ö","ø",
    							"c","ç",
    							"i","ì","í","î","ï",
    							"u","ù","ú","û","ü",
    							"y","ÿ",
    							"n","ñ","*");
    	$utf8chars = array("((à|a)|(á|a)|(â|a)|(ã|a)|(ä|a)|(å|a))","(à|a)","(á|a)","(â|a)","(ã|a)","(ä|a)","(å|a)",
    						"((é|e)|(è|e)|(ê|e)|(ë|e))","(é|e)","(è|e)","(ê|e)","(ë|e)",
    						"((ò|o)|(ó|o)|(ô|o)|(õ|o)|(ö|o)|(ø|o))","(ò|o)","(ó|o)","(ô|o)","(õ|o)","(ö|o)","(ø|o)",
    						"(ç|c)","(ç|c)",
    						"((ì|i)|(í|i)|(î|i)|(ï|i))","(ì|i)", "(í|i)","(î|i)","(ï|i)",
    						"((ù|u)|(ú|u)|(û|u)|(ü|u))","(ù|u)","(ú|u)","(û|u)","(ü|u)",
    						"(ÿ|y)","(ÿ|y)",
    						"(ñ|n)","(ñ|n)",".+");
    $string = str_ireplace($toReplaceutf8,$utf8chars,$string);
    en mettant aurelie dans l'input on récupère bien Aurélie en BD.

  7. #7
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 293
    Par défaut
    En résumé, l'opérateur REGEXP n'est pas "multi-byte safe". Il aura donc un comportement normal avec des données latin1 (si elles sont correctement déclarées en latin1), mais avec des données utf8, les caractère spéciaux (é par exemple) seront considérés comme plusieurs caractères.

    Le my.cnf ne change rien à tout ça ; dans le cas d'une comparaison avec une colonne de données, c'est le jeu de caractères de la colonne qui compterait. Dans le cas de 'Aurélie' REGEXP '...', c'est celui de la constante texte 'Aurélie', qui dépend en fait du client (pour savoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    show variables like 'char%'
    ).

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut
    merci pour ta requete...
    Et on peut changer la valeur de ces variables par une requete?
    si oui, comment?

  9. #9
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut
    SET character_set_client=utf8 ne modifie rien.

  10. #10
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut
    est-ce qu'il n'y aurait pas une autre astuce car niveau perf c'est pas top...
    J'ai remarqué un bug avec str_ireplace
    pour anais:
    ça met:
    '^(((à|a)|a)|((á|a)|a)|((â|a)|a))n(((à|a)|a)|((á|a)|a)|((â|a)|a))((ï|i)|i)s.*$'
    au lieu de:
    ((à|a)|(á|a)|(â|a))n((à|a)|(á|a)|(â|a))(ï|i)s.*$'

  11. #11
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 293
    Par défaut
    Citation Envoyé par cassy Voir le message
    merci pour ta requete...
    Et on peut changer la valeur de ces variables par une requete?
    si oui, comment?
    On peut changer la valeur de ces variables (SET NAMES), mais il ne faut surtout pas ! En effet, cela reviendrait à déclarer à MySQL un autre jeu de caractères que celui que ton client (ta page PHP) utilise vraiment.

    Tu peux par contre modifier le jeu de caractères de ta page, avec la balises HTML <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> à placer dans la <HEAD>.

    Ceci dit, cela ne modifiera que le comportement des requêtes fondée sur des constantes texte, comme SELECT 'Aurélie' REGEXP 'machin'. Mais quand tu interrogeras des données venant d'une table, ce qui contera c'est la collation de ta colonne et non celle du client.

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

Discussions similaires

  1. Vérification de formulaire avec regexp
    Par Shadow aok dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 06/08/2007, 11h57
  2. [langage] [RegExp] Détecter un chemin Windows
    Par GLDavid dans le forum Langage
    Réponses: 3
    Dernier message: 01/09/2004, 14h57
  3. [langage] [RegExp] Récupérer une portion de phrase
    Par GLDavid dans le forum Langage
    Réponses: 4
    Dernier message: 27/08/2004, 22h01
  4. [langage] [RegExp] Question d'expression régulière
    Par cloogy dans le forum Langage
    Réponses: 5
    Dernier message: 08/10/2003, 09h29
  5. regexp
    Par mathieu gérard dans le forum ASP
    Réponses: 4
    Dernier message: 02/10/2003, 18h05

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