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つの文字列を抽出しようとしています。私が最初に欲しい:

$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;
4

6 に答える 6

3

私は使用します:

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

または、文字列の開始点も確認したい場合:

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

よろしく

rbo

于 2012-07-10T18:08:30.720 に答える
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";
于 2012-07-10T18:10:11.577 に答える
1
use strict;
use warnings;

my $LDAP='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) = $LDAP =~ m{ldap://([^/]+?)/(.*?)\?.*};
print $LDAP_host, "\n";
print $LDAP_base, "\n";

生産する

sspdir.managed.entrust.com
ou=Entrust Managed Services SSP CA,ou=Certification Authorities,o=Entrust,c=US
于 2012-07-10T18:11:35.033 に答える
0

これはあなたが望むことをするはずです:

my $LDAP_host = $LDAP;
my $LDAP_base = $LDAP;
$LDAP_host =~ s|^ldap:\/\/(.*)\/.*|$1|i;
$LDAP_base =~ s|^ldap:\/\/.*\/(.*)\?.*|$1|i;
于 2012-07-10T18:00:06.717 に答える
0

元の文字列を変更したくない場合は、これを試すことができます:

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

また、検索と置換で // 以外の区切り文字を使用する場合は、スラッシュをエスケープする必要はありません。

$LDAP_host =~ s{^ldap://(.*)/.*}{$1}i;
于 2012-07-10T18:11:03.427 に答える