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

PHP & Base de données Discussion :

Recherche d'une sous-chaîne complète dans une chaîne de caractères


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 37
    Points : 22
    Points
    22
    Par défaut Recherche d'une sous-chaîne complète dans une chaîne de caractères
    Bonjour à tous,
    j'aimerais tester si une sous-chaîne complète existe dans une chaîne de caractères.
    Je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (eregi("main",$phrase)){echo $phrase;}
    Il m'affiche la phrase qui contient "main" même si c'est dans un mot comme "demain".
    Pourtant je voudrais n'avoir que la phrase qui a le mot "main" et qu'il ne m'affiche pas la phrase qui a "main" comme une partie de "demain".
    Comment est-ce que je dois faire pour n'avoir que la phrase contenant le mot "main"?
    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Hello

    Une regexp dans ce cas est totalement inutile: utilise strpos qui va 400x plus vite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $str = "une chaine de caracteres";
    if (strpos(' ' . $str, ' chaine') !== false)
     ...

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Merci pour ta réponse Benjamin Delespierre.
    Mais ça ne marche toujours pas. Dès qu'il trouve la sous chaîne, il m'affiche la phrase même si la sous-chaîne est une partie d'un mot. Alors que j'aimerais qu'il ne m'affiche la phrase que lorsque le mot (pas la partie d'un mot) est identique à la sous-chaîne recherchée.
    Je ne sais pas comment faire pour y arriver
    Merci d'avance.

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Mets un espace devant le mot recherché comme spécifié dans l'exemple tout simplement.

    -- Edit

    Comme un idiot j'avais pas vu venir le coup des suffixes.
    Qu'a cela ne tienne, voici une solution fonctionnelle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $str = "Une, chaine: de, caracteres. La suite;";
    $pieces = preg_split('~([[:punct:]]|[[:blank:]])~', $str);
    if (in_array('chaine', $pieces))
      echo "Trouvé !";

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Merci encore Benjamin Delespierre.
    Ça marche parfaitement.

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    c'est a faire avec la limite de mot \b

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $str = "Une, chaine: de, caracteres. La suite;";
    if(preg_match('/\bchaine\b/', $str))
    echo 'Trouvé !';

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Merci stealth35.
    J'ai essayé, ça marche mais lorsque j'utilise une variable à la place de chaine, ça ne marche plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for ($r=0;$r<$taille_tab;$r++){
    if(preg_match('/\b$nom_tab[$r]\b/', $title)) 
      echo $nom_tab[$r];
    }
    Comment puis-je faire pour que ça marche avec ta méthode?
    Là j'apprendrai encore davantage.

    Aussi j'aimerais que la casse ne soit pas respectée, comment dois-je faire?
    Merci d'avance.

  8. #8
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Merci encore Benjamin Delespierre.
    Ça marche mais j'aimerais que la casse ne soit pas respectée.
    Comment dois-je faire?
    Merci d'avance.

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    pour parcourir un tableau c'est foreach

    t'as pas verfié ta chaine, les guillemets simples de lisent pas les variables (c'est l'une des base du PHP)

    pour le reste tout est dans la doc
    http://www.php.net/manual/fr/referen....modifiers.php

  10. #10
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Merci pour le tuto stealth35.
    J'ai résolu mon problème de casse grâce à cette fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function in_arrayi($needle, $haystack)
    {
        return in_array(strtolower($needle), array_map('strtolower', $haystack));
    }
    Elle me permet de rendre in_array() insensible à la casse.

    Merci encore Benjamin Delespierre.

  11. #11
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Je pense que la solution proposée par stealth est bien meilleure, pour être insensible à la casse il suffit d'ajouter le modificateur i.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $str = "Une, chaine: de, caracteres. La suite;";
    $needle = "ChaInE";
    if(preg_match("/\b{$needle}\b/i", $str))
    echo 'Trouvé !';

  12. #12
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 37
    Points : 22
    Points
    22
    Par défaut
    Merci Benjamin Delespierre.
    Ça marche parfaitement.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/12/2010, 21h20
  2. Réponses: 1
    Dernier message: 26/02/2009, 18h13
  3. Recherche d'une valeur présent dans une table mais pas dans une autre
    Par bossLINDROS dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 19/06/2008, 15h12
  4. Réponses: 13
    Dernier message: 27/08/2007, 12h16
  5. Recherche de valeur dans une feuille et affichage dans une autre
    Par Zebulon777 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 15/05/2007, 09h40

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