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 Perl Discussion :

Expressions régulières sur chaîne de caractères


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 41
    Par défaut Expressions régulières sur chaîne de caractères
    Bonjour à tous,

    Actuellement en cours de configuration de LemonLDAP::NG (Système de web-sso en Perl), j'ai un petit problème pour executer certaines macro en Perl.

    En fait, le système récupère certaines valeurs d'attributs d'un annuaire LDAP pour les transformer en variables de session et j'ai besoin d'executer des macros afin de traiter certaines valeurs multivaluées.

    Par exemple, je stocke les profils d'un utilisateur à une application dans des attributs ssoRoles et lorsque je les récupère cela me donne ceci

    Pour l'utilisateur x

    $ssoRoles = ou=profil 1,ou=appli-test,ou=roles,dc=secta,dc=fr
    ou=Profil 2,ou=appli-test,ou=roles,dc=secta,dc=fr
    ou=Profil x, ou=helloworld,ou=roles,dc=secta,dc=fr

    Ceci signifie que l'utilisateur x possède les profils 1 et 2 pour appli-test et le profil x pour l'application helloworld.

    Pour récupérer le profil quand il n'y a qu'un profil pour une application, comme c'est le cas pour helloworld, pas de problèmes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((grep{/ou=helloworld/} split(';',$ssoRoles))[0] =~ /ou=(.*),ou=helloworld/)[0]
    Par contre pour générer une variables dans laquelle serait stocké, pour l'application appli-test, les valeur profil 1 et profil 2 (avec séparateur), ça ne marche pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    join(' || ', (map {/uid=(.*),ou=appli-test.*/} (grep{/ou=appli-test/} split(';',$ssoRoles)))
    Qui devrait me donner une variable ayant la valeur : "profil 1 || profil 2"

    J'ai beau le retourner dans tous les sens ça ne fonctionne pas.

    Quelqu'un aurait une idée ?

    Merci d'avance.

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Si je comprends bien, la variable $ssoRoles contient en fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ssoRoles = "ou=profil 1,ou=appli-test,ou=roles,dc=secta,dc=fr;ou=Profil 2,ou=appli-test,ou=roles,dc=secta,dc=fr;ou=Profil x, ou=helloworld,ou=roles,dc=secta,dc=fr";
    (c'est à dire avec les ; entre les profils) ?

    Si c'est bien cela, la fonction getAppli ci-dessous devrait faire l'affaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    use feature qw(:5.10);
    $ssoRoles = "ou=profil 1,ou=appli-test,ou=roles,dc=secta,dc=fr;ou=Profil 2,ou=appli-test,ou=roles,dc=secta,dc=fr;ou=Profil x, ou=helloworld,ou=roles,dc=secta,dc=fr";
     
    sub getAppli {
      my ($appli, $role) = (quotemeta(shift), shift);
      return join " || ", map /ou=(.*?)\s*,\s*ou=$appli/g, split /;/, $role;
    }
    say getAppli("helloworld", $ssoRoles);
    say getAppli("appli-test", $ssoRoles);

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 41
    Par défaut
    Merci beaucoup Philou67430.

    ça fonctionne nickel, j'ai juste adapté le script aux conventions de LemonLDAP::NG et ça tourne !

    J'avais déjà tenté de remplacer le uid par ou (le uid était cité dans un exemple, mais je ne voyais pas d'ou il sortait)..

    Merci encore.. le Perl est une découverte pour moi et tu m'as sortit d'une belle panade.

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

Discussions similaires

  1. [RegEx] Expression régulière sur des caractères alphanumériques
    Par hash95 dans le forum Langage
    Réponses: 3
    Dernier message: 16/01/2008, 17h26
  2. expression régulière sur flux
    Par zais_ethael dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 19/09/2006, 23h38
  3. [Tableaux] Opération sur chaîne de caractères
    Par kespy13 dans le forum Langage
    Réponses: 3
    Dernier message: 19/04/2006, 14h32
  4. Réponses: 4
    Dernier message: 24/08/2005, 18h40

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