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 :

Trouver un mot commençant par une lettre donnée [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 108
    Points : 56
    Points
    56
    Par défaut Trouver un mot commençant par une lettre donnée
    Bonsoir à tous,
    Je viens vers vous ce soir, parce que je sèche sérieusement ^^.
    Après plusieurs tentatives, je n'arrive pas à trouver comment, en expression régulière, trouver un mot commençant par une certaine lettre.

    Je m'explique:
    Mon but est de lister tous les mots d'une chaine, contenant en tant que première lettre un "p" par exemple. Cela comprend bien sûr le premier mot d'une chaîne, ainsi que tous les autres...

    Donc voilà, j'ai tenté plusieurs choses, dont celle que je vous présente ci-dessous, sans vraiment de succès :/.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		$preg = preg_match("(".$lettreMini."[a-zA-Z]{3,}|".$lettreMaxi."[a-zA-Z]{3,})", $row->titre, $matches);
    		if($preg){
    		    echo "Ok !";
    		}else{
    		    echo "Non ok.";
    		}

    Je remercie d'avance toute personne qui pourra m'aider .

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 108
    Points : 56
    Points
    56
    Par défaut
    Ne trouvant pas de solution, je vais passer par le bidouillage ^^:

    Je vais faire un coup de explode d'espaces pour avoir un tableau regroupant tous les mots de ma chaîne, et je ferais ma vérification en parcourant ce tableau ^^.

    Si vous avez une autre solution, je reste à votre écoute, et suis toujours preneur .



    Edit:
    Voilà, en gros, ça donnera quelque chose comme ça:

    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
    19
    20
    21
     
    $array = array();
    $mots = array();
     
    $mots = explode(" ", $row->titre);
    		$taille = sizeof($mots);
    		for($i = 0; $i < $taille; $i++){
     
    		    $search = '(^'.$lettreMini.'[a-zA-Z]{3,}|^'.$lettreMaxi.'[a-zA-Z]{3,})';
     
    		    if(preg_match($search, $mots[$i], $matches)){
     
    			array_push($array, $mots[$i]);
     
    		    }
     
    		}
     
    	    }
     
    	    return $array;

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    En se basant sur la même chose, on peut chercher tous les mots précédés par un espace qui commencent par la lettre (en ajoutant un espace au début de la chaine pour gérer le premier mot) et utilisant preg_match_all.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $matches = array();
    $chaine = ' '.$chaineATester;
    if (preg_match_all("#(\s".$lettre."[\w]*)#i", $chaine, $matches) !== false) {
      echo 'trouves : '.implode(', ', $matches[1]);
    }

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour Celira,
    une légère correction à ton code :
    $regex_mot = "#\s(".$lettre."[\w-]*)#ui";
    ( -> déplacé (pour ne pas inclure l'espace dans les résultats)
    - -> pour les mots composés (facultatif)
    u -> car sans, j'ai constaté des soucis avec certains accents.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    $chaineATester = 'Père-Noël est un papa-poule poète, un bête pépère pâle qui pue qui pète près du poêle.';
    echo $chaineATester.'<br /><br />';
     
    $lettre = 'p';
     
    $regex_mot = "#\s(".$lettre."[\w-]*)#ui";
    $matches = array();
    if (preg_match_all($regex_mot, ' '.$chaineATester, $matches) !== false) {
    	echo '-> "'.implode('", "', $matches[1]).'"';
    }
    ?>
    Père-Noël est un papa-poule poète, un bête pépère pâle qui pue qui pète près du poêle.

    -> "Père-Noël", "papa-poule", "poète", "pépère", "pâle", "pue", "pète", "près", "poêle"
    Sans mettre u dans la regex, j'obtiens ca :
    -> "P�", "papa-poule", "po�", "p�", "p�", "pue", "p�", "pr�", "poêle"
    (pas tous les accents ?! bizarre...)

    ps : encodage utf-8 (sans BOM)

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 108
    Points : 56
    Points
    56
    Par défaut
    Ah oui, excellente idée l'espace avant la chaîne !
    Bon du coup, étant déjà parti sur la base que j'ai décrite précédemment, je vais continuer avec, mais j'y penserais à l'avenir, c'est certain !

    Merci beaucoup pour vos réponses en tout cas !

  6. #6
    Invité
    Invité(e)
    Par défaut
    Tu as raison,
    rien de tel qu'une bonne usine à gaz

    Utilise au moins foreach (et sors $search de la boucle) :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $array = array();
    $mots = array();
     
    $mots = explode(" ", $row->titre);
    $search = '(^'.$lettreMini.'[a-zA-Z]{3,}|^'.$lettreMaxi.'[a-zA-Z]{3,})';
     
    	foreach($mots as $i => $mot){
    		if(preg_match($search, $mot, $matches)){
    			array_push($array, $mot);
    		}
    	}

  7. #7
    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 726
    Points
    10 726
    Par défaut
    un array_push piur 1 seul insere est inutile utilise plutôt
    $array[] = $mot, pour le groupe a-zA-Z plutot prendre le \pL si on bosse avec le l'utf-8, le pas oublier non plus que la limite de mot en pcre c'est le \b

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2008
    Messages : 108
    Points : 56
    Points
    56
    Par défaut
    Merci pour tous ces conseils . Je vais reprendre le code du coup ^^

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

Discussions similaires

  1. [AC-2003] Trouver des noms commençant par une lettre
    Par alaedine dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 27/09/2016, 13h22
  2. Effacer les fichiers commençant par une lettre
    Par louro1 dans le forum Langage
    Réponses: 1
    Dernier message: 27/06/2009, 17h40
  3. [RegEx] Chaine alphanumérique commençant par une lettre
    Par cbalmefrezol dans le forum Langage
    Réponses: 4
    Dernier message: 06/05/2009, 10h00
  4. Afficher des noms qui commencent par une lettre donnée
    Par kroma23 dans le forum Bases de données
    Réponses: 1
    Dernier message: 22/11/2008, 16h48
  5. moteur de recherche d'un nom commençant par une lettre quelquonque
    Par monphp dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 24/06/2007, 18h01

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