Cherche expression régulière

Résolu
cartouchek Messages postés 3 Statut Membre -  
 dreamer1 -
Bonjour a tous,

C'est la première fois que je post dans un forum. j'espère que l'endroit choisi est le bon...

je cherche à créer une expression régulière en PHP qui me permette de récupérer des chiffres selon le masque suivant:

15/1
7.5/1

dans une chaine comme celle ci:

03 / 04 05 06 07 08 09 / / / / 1 / 145/1 / 2 / 49/1 / 3 / 83/1 / 4 / 37/1 / 5 / 8/1 / 6 / 16/1 / 7 / 78/1 / 8 / 2,5/1 / 9 / 100/1 / 10 / 14/1 / 11 / 24/1 / 12 / 2,2/1 / 13 / 29/1 / 14 / 94/1 / 15 / 28/1 / 16 / 6,2/1

j'ai beau m'arracher les cheveux, je n'arrive pas a créer ce masque x/1.

merci d'avance a tous ceux qui pourront m'aider....
Configuration: Windows XP
Firefox 2.0.0.18

2 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    En PHP je ne sais pas, mais en shell (bash) voilà ce que ça donne :
    [tmpfs]$ echo $chaine
    03 / 04 05 06 07 08 09 / / / / 1 / 145/1 / 2 / 49/1 / 3 / 83/1 / 4 / 37/1 / 5 / 8/1 / 6 / 16/1 / 7 / 78/1 / 8 / 2,5/1 / 9 / 100/1 / 10 / 14/1 / 11 / 24/1 / 12 / 2,2/1 / 13 / 29/1 / 14 / 94/1 / 15 / 28/1 / 16 / 6,2/1
    
    [tmpfs]$ echo $chaine | grep -o '[[:digit:],]*/1'
    145/1
    49/1
    83/1
    37/1
    8/1
    16/1
    78/1
    2,5/1
    100/1
    14/1
    24/1
    2,2/1
    29/1
    94/1
    28/1
    6,2/1
    
    [tmpfs]$
    En espérant que ça te donne une piste à adapter à la syntaxe du PHP...

    ;-))
    0
    1. cartouchek Messages postés 3 Statut Membre
       
      bonjour,

      je n'est pas suivis ta piste, car la solution de lami20j fonctionne...

      en tout cas, merci à toi de m'avoir consacrer d'un peu de ton temps...
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > cartouchek Messages postés 3 Statut Membre
         
        Re-

        Ben c'est normal, celle de lami20j étant beaucoup plus adaptée ;-))
        0
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    Voici un test
    lami20j@debian:~/trash$ cat script.php
    <?
    $var="03 / 04 05 06 07 08 09 / / / / 1 / 145/1 / 2 / 49/1 / 3 / 83/1 / 4 / 37/1 / 5 / 8/1 / 6 / 16/1 / 7 / 78/1 / 8 / 2,5/1 / 9 / 100/1 / 10 / 14/1 / 11 / 24/1 / 12 / 2,2/1 / 13 / 29/1 / 14 / 94/1 / 15 / 28/1 / 16 / 6,2/1 7.5/1";
    echo "$var\n";
    
    preg_match_all('/[^0-9][0-9]\.?[0-9]\/1/',$var,$tableau);
    
    foreach ($tableau as $elem){
      print_r($elem);
      echo"\n";
    }
    ?>
    lami20j@debian:~/trash$ php script.php
    03 / 04 05 06 07 08 09 / / / / 1 / 145/1 / 2 / 49/1 / 3 / 83/1 / 4 / 37/1 / 5 / 8/1 / 6 / 16/1 / 7 / 78/1 / 8 / 2,5/1 / 9 / 100/1 / 10 / 14/1 / 11 / 24/1 / 12 / 2,2/1 / 13 / 29/1 / 14 / 94/1 / 15 / 28/1 / 16 / 6,2/1 7.5/1
    Array
    (
        [0] =>  49/1
        [1] =>  83/1
        [2] =>  37/1
        [3] =>  16/1
        [4] =>  78/1
        [5] =>  14/1
        [6] =>  24/1
        [7] =>  29/1
        [8] =>  94/1
        [9] =>  28/1
        [10] =>  7.5/1
    )
    
    
    0
    1. cartouchek Messages postés 3 Statut Membre
       
      bonjour,

      super ça marche!!!!!

      j'ai modifier un peu le code car en fait je voulais récupérer les nombres dans tous les exemples suivant:


      2/1
      12/1
      123/1
      2.1/1
      12.1/1

      j'ai donc fait comme ceci:

      preg_match_all('/[^0-9][0-9]{1,3}\\,[0-9]{1}\/1|[^0-9][0-9]{0,3}\.?[0-9]\/1/',$page,$tableau);

      foreach ($tableau as $elem)
      {
      print_r($elem);
      echo"\n";
      }


      il y a peut être plus simple, mais bon ça marche en tout cas.

      MERCI pour ton aide lami20j
      0
      1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > cartouchek Messages postés 3 Statut Membre
         
        Salut,

        De rien ;-)

        Essaie ça pour voir
        preg_match_all('/\s[0-9]{1,3}\.?[0-9]?\/1/',$page,$tableau);
        Tu veux aussi récupérer la masque avec virgule?!
        preg_match_all('/\s[0-9]{1,3}[.,]?[0-9]?\/1/',$page,$tableau);

        J'ai testé ta regex sur l'exemple que tu as donné et ça ne marche pas.
        lami20j@debian:~/trash$ cat script.php
        <?
        $page="03 / 04 05 06 07 08 09 / / / / 1 / 145/1 / 2 / 49/1 / 3 / 83/1 / 4 / 37/1 / 5 / 8/1 / 6 / 16/1 / 7 / 78/1 / 8 / 2,5/1 / 9 / 100/1 / 10 / 14/1 / 11 / 24/1 / 12 / 2,2/1 / 13 / 29/1 / 14 / 94/1 / 15 / 28/1 / 16 / 6,2/1 7.5/1 2/1 12/1 123/1 2.1/1 12.1/1";
        # la tienne
        preg_match_all('/[^0-9][0-9]{1,3}\\,[0-9]{1}\/1|[^0-9][0-9]{­0,3}\.?[0-9]\/1/',$page,$tableau);
        
        echo "Ta regex\n";
        foreach ($tableau as $elem){
          print_r($elem);
          echo"\n";
        }
        
        # la mienne seulement avec .
        preg_match_all('/\s[0-9]{1,3}\.?[0-9]?\/1/',$page,$tableau);
        
        echo "avec le point\n";
        foreach ($tableau as $elem){
          print_r($elem);
          echo"\n";
        }
        
        # la mienne avec point et virgule
        preg_match_all('/\s[0-9]{1,3}[.,]?[0-9]?\/1/',$page,$tableau);
        
        echo "avec point + virgule\n";
        foreach ($tableau as $elem){
          print_r($elem);
          echo"\n";
        }
        ?>
        lami20j@debian:~/trash$ php script.php
        Ta regex
        Array
        (
            [0] =>  2,5/1
            [1] =>  2,2/1
            [2] =>  6,2/1
        )
        
        avec le point
        Array
        (
            [0] =>  145/1
            [1] =>  49/1
            [2] =>  83/1
            [3] =>  37/1
            [4] =>  8/1
            [5] =>  16/1
            [6] =>  78/1
            [7] =>  100/1
            [8] =>  14/1
            [9] =>  24/1
            [10] =>  29/1
            [11] =>  94/1
            [12] =>  28/1
            [13] =>  7.5/1
            [14] =>  2/1
            [15] =>  12/1
            [16] =>  123/1
            [17] =>  2.1/1
            [18] =>  12.1/1
        )
        
        avec point + virgule
        Array
        (
            [0] =>  145/1
            [1] =>  49/1
            [2] =>  83/1
            [3] =>  37/1
            [4] =>  8/1
            [5] =>  16/1
            [6] =>  78/1
            [7] =>  2,5/1
            [8] =>  100/1
            [9] =>  14/1
            [10] =>  24/1
            [11] =>  2,2/1
            [12] =>  29/1
            [13] =>  94/1
            [14] =>  28/1
            [15] =>  6,2/1
            [16] =>  7.5/1
            [17] =>  2/1
            [18] =>  12/1
            [19] =>  123/1
            [20] =>  2.1/1
            [21] =>  12.1/1
        )
        


        0
      2. dreamer1 > lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
         
        salut,
        stp j'ai besoin de votre besoin dans un truc si tu c possible..
        J'ai besoin de récupérer le 10 et "Titre" du lien suivant à l'aide d'une expression réguliere(avec preg_match)
        <a href="http://www.example.com/10" >Titre</a>
        pouvez vous m'aider dans l'ecriture de l'expression??
        merci d'avance :)
        0