2009-07-17 16 views
1

「example.com」に「CN = bobvilla、OU = People、DC = example、DC = com」などの文字列を変更する(文字列内にDC =が多いことがあります)LDAPフィールドから完全なドメインを抽出するにはどうすればよいですか?

私はこの方法を持っていますが、それは私にとっては控え目で、誰かがより良いアイディアを持っているかどうかを見たいと思っていました。これは、仕事をする必要があります〜

答えて

4

です:

my $str = "CN=bobvilla, OU=People, DC=example, DC=com"; 
print "old: $str\n"; 

これは疑問から真っ直ぐでした。

my $new_str = join '.', @DCs; 
print "new: $new_str\n"; 

全体の "プログラム":

my @DCs = $str =~ m/DC=([^\s,]+)/g; 

が結果にそれを結合して印刷:

は、今、私たちはすべてのDCを取得する必要があり、単一の正規表現で

my $str = "CN=bobvilla, OU=People, DC=example, DC=com"; 
print "old: $str\n"; 

my @DCs = $str =~ m/DC=([^\s,]+)/g; 
my $new_str = join '.', @DCs; 

print "new: $new_str\n"; 
1

my $str = "CN=bobvilla, OU=People, DC=example, DC=com"; 
print "old: $str\n"; 
while($str =~ s/DC=([^,]+)//) 
{ 
    $new_str .= "$1."; 
} 
$new_str =~ s/\.$//; 
print "new: $new_str\n"; 

感謝:

my $str = "DC=example, DC=com"; 
$str =~ s/DC=//g; 
$str =~ s/,\s/./g; 
print "new: $str\n"; 
+0

他の "、"がDCフィールドの外で一致すると問題になる場合があります – nik

+0

編集をチェックし、何かを含めるのを忘れた – user105033

+0

ああ、元のサンプルに存在しなかったフィールド – Quentin

1

ここでそれは比較的簡単です片道

my $str = "CN=bobvilla, OU=People, DC=example, DC=com"; 
@s = split /,\s+/ , $str; 
foreach my $item (@s){ 
    if (index($item,"DC") == 0) {   
     $item = substr($item,3); 
     push(@i , $item) 
    } 
} 
print join(".",@i); 
+0

これはLDAPに適していますバインディング文字列。 – nik

0

$str =~ s/(?:^|(,)\s+)(?:.(?<!\sDC=))*?DC=(?=\w+)|[,\s]+.*$|^.*$/$1&&'.'/ge; 
関連する問題