正则表达式匹配ldap连接字符串

Max*_*axP 1 php regex ldap

我需要从这样的LDAP连接字符串中提取信息:

ldap://uid=adminuser,dc=example,c=com:secret@ldap.example.com/dc=basePath,dc=example,c=com
Run Code Online (Sandbox Code Playgroud)

我想使用一个正则表达式,它将为我提取每个标记并将其放在一个数组中.我尝试了一些正则表达式,我得到的最好的是:

/(\w+)\:\/\/(([a-zA-Z0-9]+)(:([^\:\@]+))?@)?([^\/]+)((\/[^#]*)?(#(.*))?)/
Run Code Online (Sandbox Code Playgroud)

但不幸的是,当我在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
)
Run Code Online (Sandbox Code Playgroud)

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

谢谢

bob*_*nce 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"
}
Run Code Online (Sandbox Code Playgroud)