「example.com」に「CN = bobvilla、OU = People、DC = example、DC = com」などの文字列を変更する(文字列内にDC =が多いことがあります)LDAPフィールドから完全なドメインを抽出するにはどうすればよいですか?
私はこの方法を持っていますが、それは私にとっては控え目で、誰かがより良いアイディアを持っているかどうかを見たいと思っていました。これは、仕事をする必要があります〜
「example.com」に「CN = bobvilla、OU = People、DC = example、DC = com」などの文字列を変更する(文字列内にDC =が多いことがあります)LDAPフィールドから完全なドメインを抽出するにはどうすればよいですか?
私はこの方法を持っていますが、それは私にとっては控え目で、誰かがより良いアイディアを持っているかどうかを見たいと思っていました。これは、仕事をする必要があります〜
です:
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";
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";
ここでそれは比較的簡単です片道
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);
これはLDAPに適していますバインディング文字列。 – nik
:
$str =~ s/(?:^|(,)\s+)(?:.(?<!\sDC=))*?DC=(?=\w+)|[,\s]+.*$|^.*$/$1&&'.'/ge;
他の "、"がDCフィールドの外で一致すると問題になる場合があります –
nik
編集をチェックし、何かを含めるのを忘れた – user105033
ああ、元のサンプルに存在しなかったフィールド – Quentin