2012-07-10 80 views
1
$LDAP = ldap://sspdir.managed.entrust.com/ou=Entrust Managed Services SSP CA,ou=Certification Authorities,o=Entrust,c=US?cACertificate;binary,crossCertificatePair;binary 

我想從此代碼ldap目錄中提取2個字符串。首先我想:Perl正則表達式替換並保存到變量

$LDAP_host = sspdir.managed.entrust.com 

和第二...

$LDAP_base = ou=Entrust Managed Services SSP CA,ou=Certification Authorities,o=Entrust,c=US 

我的代碼如下,它在我的輸出端產生恆定的錯配和我想不通爲什麼:

my $LDAP_host = $LDAP; 
my $LDAP_base = $LDAP; 
$LDAP_host =~ s|^ldap:\/\/(.*)\/|$1|i; 
$LDAP_base =~ s|"\/"(.*)\?|$1|i; 
+0

如果這是一個LDAP字符串,應該有合適的模塊來解析它。 – TLP 2012-07-10 18:27:47

回答

0

這應該做你想做的事:

my $LDAP_host = $LDAP; 
my $LDAP_base = $LDAP; 
$LDAP_host =~ s|^ldap:\/\/(.*)\/.*|$1|i; 
$LDAP_base =~ s|^ldap:\/\/.*\/(.*)\?.*|$1|i; 
+0

謝謝你的完美工作! – eagles02 2012-07-10 18:11:20

3

我會使用:

my ($LDAP_host, $LDAP_base) = $LDAP=~ m{ // ([^/]+)/(ou=[^?]+) }x; 

或者,如果你想查詢字符串的開頭太:

my ($LDAP_host, $LDAP_base) = $LDAP=~ m{ ^ldap:// ([^/]+)/(ou=[^?]+) \? }x; 

問候

RBO

1
my $str = "ldap://sspdir.managed.entrust.com/ou=Entrust Managed Services SSP CA,ou=Certification Authorities,o=Entrust,c=US?cACertificate;binary,crossCertificatePair;binary"; 
my ($LDAP_host, $LDAP_base) = ($str =~ m!ldap://([^/]+)/([^?]+)!); 
print "$LDAP_host $LDAP_base\n"; 
0

如果你不想改變原來的字符串,你可以試試這個:

my ($host) = $LDAP =~ /^ldap:\/\/(.*)\//i; 

此外,如果您在搜索中使用//以外的分隔符並替換,則 不需要轉義正斜槓。

$LDAP_host =~ s{^ldap://(.*)/.*}{$1}i; 
1

產生

sspdir.managed.entrust.com 
ou=Entrust Managed Services SSP CA,ou=Certification Authorities,o=Entrust,c=US 
0

請在下面找到實現用perl相同的電樞方式。

my $LDAP = "ldap://sspdir.managed.entrust.com/ou=Entrust Managed Services SSP CA,ou=Certification Authorities,o=Entrust,c=US?cACertificate;binary,crossCertificatePair;binary"; 
$LDAP =~ '^\w+\W+(.*)/(.*)\?.*$'; 
$LDAP_host = $1; 
$LDAP_base = $2; 
print "\$LDAP_base => $LDAP_base\n\$LDAP_host => $LDAP_host\n"; 

輸出會是這樣:

$ LDAP_base => OU =委託管理服務SSP CA,OU =證書頒發機構,O =委託,C = US $ = LDAP_host> sspdir.managed。 entrust.com