Wie kann ich mit Perl überprüfen, ob eine bestimmte Zeichenfolge einen bestimmten Teilstring enthält?
Insbesondere möchte ich sehen, ob s1.domain.comdie angegebene Zeichenfolgenvariable vorhanden ist.
Wie kann ich mit Perl überprüfen, ob eine bestimmte Zeichenfolge einen bestimmten Teilstring enthält?
Insbesondere möchte ich sehen, ob s1.domain.comdie angegebene Zeichenfolgenvariable vorhanden ist.
Antworten:
Um herauszufinden, ob eine Zeichenfolge Teilzeichenfolgen enthält, können Sie die folgende indexFunktion verwenden:
if (index($str, $substr) != -1) {
print "$str contains $substr\n";
}
Es wird die Position des ersten Auftretens von $substrin $stroder -1 zurückgegeben, wenn der Teilstring nicht gefunden wird.
Eine andere Möglichkeit ist die Verwendung regulärer Ausdrücke , wofür Perl berühmt ist:
if ($mystring =~ /s1\.domain\.com/) {
print qq("$mystring" contains "s1.domain.com"\n);
}
Die Backslashes werden benötigt, da a .mit jedem Zeichen übereinstimmen kann. Sie können dies umgehen, indem Sie die Operatoren \Qund verwenden \E.
my $substring = "s1.domain.com";
if ($mystring =~ /\Q$substring\E/) {
print qq("$mystring" contains "$substring"\n);
}
Oder Sie können wie angegeben vorgehen und die Indexfunktion verwenden. Nur ein Wort der Warnung: Index gibt a zurück, -1wenn keine Übereinstimmung anstelle von undefoder gefunden werden kann 0.
Dies ist also ein Fehler:
my $substring = "s1.domain.com";
if (not index($mystring, $substr)) {
print qq("$mystring" doesn't contains "$substring"\n";
}
Dies ist falsch, wenn s1.domain.comes am Anfang Ihrer Zeichenfolge steht. Ich persönlich bin mehr als einmal daran verbrannt worden.
index()ist im einfachen Fall schneller als Regexps?
=~, index(), ~~und match::simplealle ein wenig schien awk-ward ...: - \
domain.compassen subdomain.domain.comüber die REGEX verwenden, irgendwelche Ideen?
Beispiel für eine Teilzeichenfolge ohne Berücksichtigung der Groß- und Kleinschreibung
Dies ist eine Erweiterung von Eugenes Antwort, die die Zeichenfolgen in Kleinbuchstaben konvertiert, bevor nach dem Teilstring gesucht wird:
if (index(lc($str), lc($substr)) != -1) {
print "$str contains $substr\n";
}
:) gelten.