Ich benutze Perl v5.10 auf CentOS 6.8Perl regex Maschine Namen von Hostnamen extrahieren
Mein Programm eine Liste der Hostnamen liest in Perl-Array @aVmList
. Ich versuche, nur den Maschinennamen von jedem von ihnen zu extrahieren.
Einige der Hostnamen sind vollständig qualifiziert, andere nicht. Einige enthalten Bindestriche oder Unterstriche.
Ich habe keine Kontrolle über den Inhalt des Arrays.
Hier ist ein Beispiel für die Daten, mit denen ich arbeite.
my @aVmList = qw(
vmserver1.domain.com
vmserver2
vm-server-three.otherdomain.com
server_four.domain.com
server5
server6
some-silly-vm-name
another_server.maybewithadomain.com
);
Ich möchte Name nur das Gerät von jedem Element extrahieren, mit dem folgenden enden.
vmserver1
vmserver2
vm-server-three
server_four
server5
server6
some-silly-vm-name
another_server
fand ich die Regex /(.*?)\./
die fast funktioniert, aber nur dann, wenn alle Namen sind vollständig qualifiziert.
foreach (@aVmList) {
$_ =~ /(.*?)\./;
my $sVmName = $1;
print $sVmName;
}
Ich dachte, ich für die Punkte ein Blick hinter die Verwendung benötigt. Ich kam mit der folgenden
$_ =~ /([A-Za-z0-9-_]+)(?!=\.)/;
auf, die in der Regex Tester schien zu funktionieren, aber wenn ich meine Perl-Skript lief es abgestimmt noch die gesamte Zeichenfolge.
Ich mag nicht den Pfad, den ich mit dem obigen Regex-Muster gehe, weil ich jetzt nehme, dass die Host-Namen nur "Wort" -Zeichen oder einen Bindestrich enthalten.
Ich weiß, ich sollte nicht Sonderzeichen in Host-Namen berücksichtigen müssen, aber ich versuche, das Regex-Muster auf alles vor dem ersten Punkt in einem Domain-Namen suffix.something.com
.
Ich fand auch Regular expression to extract hostname from fully qualified domain name , die sich anhörte wie, was ich wollte, aber keiner der Vorschläge von dort zu arbeiten schien.
Ich habe versucht:
$_ =~ (.+?)(?=\.)
und
$_ =~ ^([^.]+)\..*$
Teilen Sie Ihre Zeichenfolge auf Punkte und nehmen Sie den ersten Teil. –
'[A-Za-z0-9 -_] +' wird normalerweise geschrieben '[\ w-]' – Borodin