Expression reguliere

Bonjour,

Donc est-il possible d'écrire une expression qui se comporterait différemment selon la valeur d'un groupe ?
par exemple :

ligne 1 : abc bleu
ligne 2 : xyz rouge

si c'est 'bleu' retourne ce qui est compris entre 'a' et 'c', donc 'b'
et si c'est 'rouge' retourne ce quui est compris entre 'x' et 'z', donc 'y'

Là je suis sec :-(
Merci pour votre aide !
Configuration: Windows XP
Firefox 2.0.0.14

6 réponses

  1. Modérateur
    Re,
    root@debian:~# cat regex.txt
    ligne 1 : 1A abc bleu
    ligne 2 : xyz 2BC rouge
    
    root@debian:~# perl -ne 'print $1,"\n" if /.*:\s*(\w+)\s+(\w+)\s+(bleu)/' regex.txt
    1A
    root@debian:~# perl -ne 'print $2,"\n" if /.*:\s*(\w+)\s+(\w+)\s+(rouge)/' regex.txt
    2BC

    1. Modérateur
      Salut,

      Tu as une idée ?

      J'ai plein d'idées môa, des fois bonnes des fois mauvaises ;-))

      Tu joues à quoi? ;-)

      Pourquoi n'exposes tout le problème d'un coup, au lieu de donner goutte à goutte?
      1. Modérateur
        Salut,
        lami20j@debian:~$ cat regex.txt
        ligne 1 : abc bleu
        ligne 2 : xyz rouge
        lami20j@debian:~$ perl -ne 'print $1,"\n" if /.*\s\w(\w)\w\s+(bleu|rouge)/' regex.txt
        b
        y

        1. ok
          plus dur maintenant

          ligne 1 : 1A abc bleu
          ligne 2 : xyz 2BC rouge

          si bleu alors retourne le premier groupe (1A)
          si rouge alors retourne le second groupe (2BC)

          en fait je voudrais pouvoir executer deux regex differentes selon la valeur d'un groupe....
          Tu as une idée ?
      2. merci pour ta réponse,
        si je comprend bien il faut faire une expression pour le 'bleu' et une pour 'rouge'.
        Mais n'y a-t-il pas moyen de n'écrire qu'une seule expression ?

        Merci
        1. Modérateur
          par exemple avec perl
          lami20j@debian:~/trash$ cat regex.txt
          ligne 1 : abc bleu
          ligne 2 : xyz rouge
          lami20j@debian:~/trash$ perl -ne 'print $1,"\n" if /.*\s\w(\w)\w\s+bleu/' regex.txt
          b
          lami20j@debian:~/trash$ perl -ne 'print $1,"\n" if /.*\s\w(\w)\w\s+rouge/' regex.txt
          y

          1. Modérateur
            Salut,

            oui, c'est possible, mais avec quel outils/langage tu veux le faire