Cherche expression régulière

Résolu
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. Modérateur
    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. 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
    2. Modérateur
      @cartouchekRe-

      Ben c'est normal, celle de lami20j étant beaucoup plus adaptée ;-))
      0
  2. Modérateur
    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. 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
    2. Modérateur
      @cartouchekSalut,

      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
    3. @lami20jsalut,
      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