Как извлечь полные домены из полей LDAP? - PullRequest
1 голос
/ 17 июля 2009

Что мне нужно сделать, это изменить строку, например, "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 ]

4 голосов
/ 17 июля 2009

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

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

Это было прямо из вопроса.

Теперь нам нужно получить все DC:

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";
1 голос
/ 17 июля 2009

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

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);
1 голос
/ 17 июля 2009

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

my $str = "DC=example, DC=com";
$str =~ s/DC=//g;
$str =~ s/,\s/./g;
print "new: $str\n";
0 голосов
/ 17 июля 2009

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

$str =~ s/(?:^|(,)\s+)(?:.(?<!\sDC=))*?DC=(?=\w+)|[,\s]+.*$|^.*$/$1&&'.'/ge;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...