Регулярное выражение для соответствия строке подключения ldap - PullRequest
1 голос
/ 21 сентября 2010

Мне нужно извлечь информацию из строки подключения 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
)

Может кто-нибудь помочьмне, чтобы я мог правильно извлечь каждую часть строки подключения?

Спасибо

1 Ответ

5 голосов
/ 21 сентября 2010

([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"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...