2010-09-21 12 views
1

J'ai besoin d'extraire des informations à partir d'une chaîne de connexion LDAP comme celui-ci:expression régulière pour correspondre à une chaîne de connexion ldap

ldap://uid=adminuser,dc=example,c=com:[email protected]/dc=basePath,dc=example,c=com 

Je veux utiliser une expression régulière qui va extraire chaque jeton pour moi et le placer dans un tableau. J'ai essayé une expression regex et le meilleur que je suis arrivé était le suivant:

/(\w+)\:\/\/(([a-zA-Z0-9]+)(:([^\:\@]+))[email protected])?([^\/]+)((\/[^#]*)?(#(.*))?)/ 

Mais malheureusement, quand je l'exécute en PHP, je reçois le résultat suivant:

Array 
(
    [0] => ldap://uid=adminuser,dc=example,c=com:[email protected]/dc=basePath,dc=example,c=com 
    [1] => ldap 
    [2] => 
    [3] => 
    [4] => 
    [5] => 
    [6] => uid=adminuser,dc=example,c=com:[email protected] 
    [7] => /dc=basePath,dc=example,c=com 
    [8] => /dc=basePath,dc=example,c=com 
) 

Quelqu'un peut-il me aider pour que je peut extraire correctement chaque partie de la chaîne de connexion?

Merci

+1

Quelle langue utilisez-vous? Pourriez-vous éditer votre question pour montrer le résultat attendu pour votre chaîne d'échantillon? L'ordre et le nombre de pièces sont-ils variables? –

Répondre

5

([a-zA-Z0-9]+) semble tout à fait insuffisant pour ramasser une chaîne LDAP contenant = et d'autres caractères.

En général, vous ne devriez pas essayer d'analyser les URL vous-même avec regex. Au lieu de cela, utilisez la fonction de bibliothèque standard parse_url().

Cela donne:

array(5) { 
    ["scheme"]=> 
    string(4) "ldap" 
    ["host"]=> 
    string(16) "ldap.example.com" 
    ["user"]=> 
    string(30) "uid=adminuser,dc=example,c=com" 
    ["pass"]=> 
    string(6) "secret" 
    ["path"]=> 
    string(29) "/dc=basePath,dc=example,c=com" 
} 
+0

WOW! C'est bien mieux qu'une regex :) Merci beaucoup! – MaxP

Questions connexes