2010-09-21 134 views
1

我需要从一个LDAP连接字符串,像这样的提取信息:正则表达式匹配的LDAP连接字符串

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

我想用正则表达式来提取每个令牌对我来说,并放置在数组。我尝试了一些正则表达式,我得到了最好的是这样的:

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

但不幸的是,当我在PHP执行它,我得到以下结果:

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 
) 

任何人可以帮助我,让我可以正确提取连接字符串的每个部分?

感谢

+1

哪种语言是您使用?你可以编辑你的问题来显示你的样本字符串的预期结果吗?部件的顺序和数量是否可变? – 2010-09-21 13:45:03

回答

5

([a-zA-Z0-9]+)显得相当不足拿起含=和其他字符的字符串LDAP。

一般来说,你不应该试图用正则表达式自己解析URL。相反,请使用标准库函数parse_url()

这给:

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

哇!这比正则表达式更好:)非常感谢! – MaxP 2010-09-21 17:23:08