Как извлечь полные домены из полей LDAP?

Что мне нужно сделать, это изменить строку, такую ​​как "CN=bobvilla, OU=People, DC=example, DC=com" (может иметь много DC = в строке) на "example.com"

У меня есть этот метод, но он кажется мне небрежным, и я хотел посмотреть, есть ли у кого идея получше.

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";

спасибо ~

4 ответа

Решение

Это относительно просто:

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";

Вся "программа":

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";

Это должно сделать работу:

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

Вот один из способов

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);

В одном регулярном выражении:

$str =~ s/(?:^|(,)\s+)(?:.(?<!\sDC=))*?DC=(?=\w+)|[,\s]+.*$|^.*$/$1&&'.'/ge;
Другие вопросы по тегам