Как извлечь полные домены из полей 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;