regex
  • perl
  • 2009-07-17 6 views 1 likes 
    1

    Was ich tun muss, ist eine Zeichenfolge wie "CN = bobvilla, OU = Menschen, DC = Beispiel, DC = com" (kann viele DC = 's in der Zeichenfolge haben) zu "example.com"Wie kann ich vollständige Domains aus LDAP-Feldern extrahieren?

    Ich habe diese Methode, aber es scheint schlampig zu mir und wollte sehen, ob jemand eine bessere Idee hatte.

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

    thanks ~

    Antwort

    4

    Es ist relativ einfach:

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

    Das war direkt aus Frage.

    Jetzt müssen wir alle DCs erhalten:

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

    Kombinieren Sie es in Folge und Druck:

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

    Whole "Programm":

    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

    Das die Arbeit machen sollte:

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

    Würde in Schwierigkeiten geraten, wenn Sie eine andere ", " Übereinstimmung außerhalb der DC-Felder hätte – nik

    +0

    Überprüfen Sie meine Bearbeitung, vergaß etwas zu enthalten – user105033

    +0

    Ah, die Felder, die nicht in der ursprünglichen Probe – Quentin

    1

    hier ist ein Weg,

    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

    existierten dies ist für ein LDAP korrekt Bindefaden – nik

    0

    In einem einzigen Regex:

    $str =~ s/(?:^|(,)\s+)(?:.(?<!\sDC=))*?DC=(?=\w+)|[,\s]+.*$|^.*$/$1&&'.'/ge; 
    
    Verwandte Themen