Partage
  • Partager sur Facebook
  • Partager sur Twitter

Expression régulière pour *mot*

Sujet résolu
    5 janvier 2021 à 14:32:53

    Bonjour à tous !

    J'ai un problème que je n'arrive pas à résoudre...J'ai un champs textarea et je voudrai prendre tous les mots entouré de * * (Ex: J'aime aller à *Paris*).

    Donc pour prendre juste le mot entouré et l'enregistrer, j'aurai voulu une expression régulière qui cherche le/les mots entourés de la phrase. Mais je n'ai rien trouvé sur ce sujet, et je ne sais pas dutout manipulé les expressions régulières.

    Voici mon début de code :

    <form method="POST">
     <div class="form-group mt-3">
            <textarea class="form-control" name="text" id="textarea">
             
            </textarea>
           </div>
           <button class="btn btn-primary" name="submit">
            Enregistrer
           </button>
          </form>
    
    <?php 
    
    function extraireMotsDUnePhrase($text)
    {    
         
    /* caractères que l'on va remplacer (tout ce qui sépare les mots, en fait) */
        $aremplacer = array(",",".",";",":","!","?","(",")","[","]","{","}","\"","'"
    ," ");
     
      /* ... on va les remplacer par un espace, il n'y aura donc plus dans $phrase 
    que des mots et des espaces */
     
        $enremplacement = " ";
     
          
    /* on fait le remplacement (comme dit ci-avant), puis on supprime les espaces de
    // début et de fin de chaîne (trim) */
        $sansponctuation = trim(str_replace($aremplacer, $enremplacement, $text));
       
      
       
    /* on coupe la chaîne en fonction d'un séparateur, et chaque élément est une
    // valeur d'un tableau */
        $separateur = "#[ ]+#"; // 1 ou plusieurs espaces
        $mots = preg_split($separateur, $sansponctuation);
          
        return $mots;
    }
    
           if(isset($_POST['submit']))
           {
               $text = $_POST['text'];
               
            $quelquesmots = extraireMotsDUnePhrase($text);
            foreach($quelquesmots as $valeur)
            {
               echo '<p>'.$valeur.'</p>';
    
               if(preg_match('#............#', $valeur))
               {
                     .............
               }
            }
    
               
           }
    
         ?>
          

    Merci !

    -
    Edité par KiripouZz 5 janvier 2021 à 14:40:49

    • Partager sur Facebook
    • Partager sur Twitter
      5 janvier 2021 à 14:39:41 - Message modéré pour le motif suivant : La demande de l'équipe de modération a été honorée.


      Pas d'aide concernant le code par MP, le forum est là pour ça :)

        5 janvier 2021 à 14:40:19

        preg_match_all avec '~\*[[:alpha:]]+\*~u' ?

        Ton code a l'air inutilement compliqué et je ne vois nulle part où il extrait des mots situés entre deux *

        -
        Edité par julp 5 janvier 2021 à 15:04:44

        • Partager sur Facebook
        • Partager sur Twitter
          5 janvier 2021 à 14:44:01

          julp a écrit:

          preg_match_all avec ~\*[:alpha:]+\*~u ?


          Merci pour ta réponse si rapide !

          Et non il n'extrait pas les mots situés entre 2 * car il me faut une expression regulière pour les trouver

          Et j'ai remplacer par 

          if(preg_match_all('~\*[:alpha:]+\*~u', $valeur))

          Et ça me met l'erreur : preg_match_all(): Compilation failed: POSIX named classes are supported only within a class at offset 2

          -
          Edité par KiripouZz 5 janvier 2021 à 14:46:00

          • Partager sur Facebook
          • Partager sur Twitter
            5 janvier 2021 à 15:05:43

            My bad, j'ai oublié de doubler les crochets.

            Mais ton preg_match_all, utilisé comme ça, il ne doit pas servir à grand chose (ie il manque au moins un paramètre).

            -
            Edité par julp 5 janvier 2021 à 15:05:52

            • Partager sur Facebook
            • Partager sur Twitter
              5 janvier 2021 à 18:57:45

              julp a écrit:

              My bad, j'ai oublié de doubler les crochets.

              Mais ton preg_match_all, utilisé comme ça, il ne doit pas servir à grand chose (ie il manque au moins un paramètre).

              -
              Edité par julp il y a environ 3 heures


              Ok...Alors quel paramètre mettre pour qu'il trouve le mot entouré ?

              Et où faut-il mettre les crochets ?

              -
              Edité par KiripouZz 5 janvier 2021 à 19:00:24

              • Partager sur Facebook
              • Partager sur Twitter
                5 janvier 2021 à 19:08:59

                Le paramètre matches.

                Mais je t'ai proposé ça pour extraire directement tous les mots (mot au sens constitué de lettres et au moins une) entourés de *.

                Sauf que ça n'a pas l'air de coller avec le but réel et ce que tu fais.

                • Partager sur Facebook
                • Partager sur Twitter
                  5 janvier 2021 à 19:11:54

                  julp a écrit:

                  Le paramètre matches.

                  Mais je t'ai proposé ça pour extraire directement tous les mots (mot au sens constitué de lettres et au moins une) entourés de *.

                  Sauf que ça n'a pas l'air de coller avec le but réel et ce que tu fais.


                  Ce que je veux faire c'est prendre juste les mots entouré de 2 * puis les enregistrer...

                  • Partager sur Facebook
                  • Partager sur Twitter
                    5 janvier 2021 à 19:27:10

                    $text = "J'aime aller à *Paris*";
                    preg_match_all('~\*([[:alpha:]]+)\*~u', $text, $matches, PREG_SET_ORDER);
                    foreach ($matches as $match) {
                        echo $match[1]; // enfin traiter le mot
                    }
                    

                    ?

                    • Partager sur Facebook
                    • Partager sur Twitter
                      5 janvier 2021 à 20:00:28

                      julp a écrit:

                      $text = "J'aime aller à *Paris*"; preg_match_all('~\*([[:alpha:]]+)\*~u', $text, $matches, PREG_SET_ORDER); foreach ($matches as $match) { echo $match[1]; // enfin traiter le mot } 

                      ?


                      Merci beaucoup, maintenant ça marche !
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Expression régulière pour *mot*

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown