我需要从LDAP连接字符串中提取信息,如下所示:
ldap://uid=adminuser,dc=example,c=com:secret@ldap.example.com/dc=basePath,dc=example,c=com
我想使用一个正则表达式,它将为我提取每个标记并将其放在一个数组中。我尝试了一些正则表达式,我得到的最好的是:
/(\w+)\:\/\/(([a-zA-Z0-9]+)(:([^\:\@]+))?@)?([^\/]+)((\/[^#]*)?(#(.*))?)/
但不幸的是,当我在PHP中执行它时,我得到以下结果:
Array
(
[0] => ldap://uid=adminuser,dc=example,c=com:secret@ldap.example.com/dc=basePath,dc=example,c=com
[1] => ldap
[2] =>
[3] =>
[4] =>
[5] =>
[6] => uid=adminuser,dc=example,c=com:secret@ldap.example.com
[7] => /dc=basePath,dc=example,c=com
[8] => /dc=basePath,dc=example,c=com
)
任何人都可以帮助我,以便我可以正确提取连接字符串的每个部分吗?
由于
答案 0 :(得分: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"
}