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 :

Recherche mot en entier [RegEx]


Sujet :

Langage PHP

  1. #1
    Débutant   Avatar de kaking
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 753
    Points : 262
    Points
    262
    Par défaut Recherche mot en entier
    gabuzomeu !

    alors voila, mon cher client m'a demandé que la recherche SQL de son site sur un champs textarea recherche les mot ENTIER uniquement...

    c'est à dire que j'ai deux entrées dans ma bdd :

    "cherche développeur LAN." et
    "Lancelot, chevalier du lac"

    Il veut qu'en tapant LAN je ne retourne que la premiere entrée.... damned !

    donc, moi, comme un gros batard, je fais un like '%LAN' dans ma requête, mais même pas, car il a rajouté un '.' après LAN donc, que dalle ! et donc, je me dis qu'il faudrait vraiment régler le problème.

    Une manière simple serait de rajouter deux espaces entre les expressions de recherche : ca ferait un LIKE '% LAN %' comme ca, il rechercherait le MOT 'LAN' (ce que je souhaite)

    oui mais non ! because que si il y'a un . ou un ! apres le mot de recherche, ou si je suis en fin ou en début de phrase, prrrrrt ! il nous méprise éhontément !

    comprenez vous mon problème, très chers internautes ? siouplais, une idée, un indice ?

    merci bien les gens

    ++

    ps : j'ai simplifié a mort le probleme ! en fait, il fait une recherche sur tout plein de textarea, et ressort d'autres contenu ! genre il fait une recherche sur 12 textarea mais ne sélectionne que le titre et l'ID correspondant pour les afficher dans la liste de résultat de recherche... ce qui rend impossible les traitements post-requête !

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2012
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2012
    Messages : 131
    Points : 242
    Points
    242
    Par défaut
    Salut

    essaye cette requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM table WHERE champ REGEXP 'LAN[^a-zA-Z]|[^a-zA-Z]LAN'

  3. #3
    Débutant   Avatar de kaking
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 753
    Points : 262
    Points
    262
    Par défaut
    bon alors :

    petit 1 : Bonjour l'ami

    petit 2 : damned, ca a l'air de marcher ton machin, la !

    petit 3 : tu pourrais m'expliquer ce que t'as fais siouplais ?

    petit 4 : ca a l'air franchement booooon ton code la ! ca me dépanne grave ! encore merci de l'aide !!!!! yes !

  4. #4
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 893
    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 893
    Points : 16 347
    Points
    16 347
    Par défaut
    Il suffit de lire la doc MySQL pour avoir une réponse :
    http://dev.mysql.com/doc/refman/5.1/en/regexp.html

    On y lit :

    [[:<:]], [[:>:]]

    These markers stand for word boundaries. They match the beginning and end of words, respectively. A word is a sequence of word characters that is not preceded by or followed by word characters. A word character is an alphanumeric character in the alnum class or an underscore (_).

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mysql> SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]';   -> 1
    mysql> SELECT 'a xword a' REGEXP '[[:<:]]word[[:>:]]';  -> 0

  5. #5
    Débutant   Avatar de kaking
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 753
    Points : 262
    Points
    262
    Par défaut
    peste ! j'avais lu, mais sans comprendre

    ok, bah ca a l'air tres tres bon tout ca, j'ai de quoi épater mon client avec tout ca

    encore merci, c'est super sympa, rapide efficace et tout et tout

    merci selmouadin et Bisûnûrs

  6. #6
    Débutant   Avatar de kaking
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 753
    Points : 262
    Points
    262
    Par défaut
    sorry les gens, mais je viens de faire un essai et ca ne marche pas du tout !!!

    si je fais ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT introtext
    FROM `content`
    WHERE introtext
    REGEXP 'lan[^a-zA-Z]|[^a-zA-Z]lan'
    il me sort cette entrée la !!!

    "Définition du processus de lancement commercial du C++" because qu'il y a "lancement" qui contient "lan"

    mais justement, c'est ce que je voulais éviter ! il ne devrait sortir que les contenus qui ont le MOT "lan"

    une idée siouplais ?

    une image pour vous montrer ce que je dis :

    Nom : lan.png
Affichages : 437
Taille : 37,3 Ko

  7. #7
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 893
    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 893
    Points : 16 347
    Points
    16 347
    Par défaut
    Citation Envoyé par Bisûnûrs Voir le message
    Il suffit de lire la doc MySQL pour avoir une réponse :
    http://dev.mysql.com/doc/refman/5.1/en/regexp.html

    On y lit :

    [[:<:]], [[:>:]]

    These markers stand for word boundaries. They match the beginning and end of words, respectively. A word is a sequence of word characters that is not preceded by or followed by word characters. A word character is an alphanumeric character in the alnum class or an underscore (_).

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mysql> SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]';   -> 1
    mysql> SELECT 'a xword a' REGEXP '[[:<:]]word[[:>:]]';  -> 0

  8. #8
    Débutant   Avatar de kaking
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 753
    Points : 262
    Points
    262
    Par défaut
    haaaa


    haaaa ouiiiiiiii


    d'accooooooooooooooooord


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WHERE introtext
    REGEXP '[[:<:]]lan[[:>:]]'
    *kaking s'enfuit en courant

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 31
    Points : 28
    Points
    28
    Par défaut Chercher un mot entier avec MySql
    Personnellement, j'utilise ceci dans mes requêtes SQL:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * From la_table_voulue WHERE champ_désiré REGEXP '([^a-z0-9àáâãäåòóôõöœøèéêëçìíîïùúûüÿñ]|^)le_mot_entier_à_rechercher([^a-z0-9àáâãäåòóôõöœøèéêëçìíîïùúûüÿñ]|$)'

    (Votre table soit être case insensitive)

    L'avantage de cette méthode par rapport à l'utilisation de :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * From la_table_voulue WHERE champ_désiré REGEXP '[[:<:]]le_mot_entier_à_rechercher[[:>:]]'

    c'est qu'on peut construire des requêtes plus complexes avec des AND dont les termes sont des REGEXP sur le même champ.

    Sinon, ça ne marche pas. MySQL ne trouve rien.

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

Discussions similaires

  1. Recherche Mot Clef sous WORD
    Par tiftay01 dans le forum Word
    Réponses: 2
    Dernier message: 21/06/2006, 08h25
  2. Débutant : Rechercher mot-clé et extraire paragraphe
    Par systembenlaget dans le forum Langage
    Réponses: 1
    Dernier message: 05/05/2006, 16h47
  3. [DEBUTANT]Recherche mot contenu dans une String
    Par lynxman dans le forum Langage
    Réponses: 7
    Dernier message: 16/12/2005, 11h49
  4. [langage] exp reg: recherche mot ou ensemble de mot
    Par eautret dans le forum Langage
    Réponses: 5
    Dernier message: 14/12/2004, 17h25
  5. [jakarta][regex]Matcher mot en entier.
    Par thibaut dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 26/05/2004, 13h33

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