Wie kann ich mit Perl überprüfen, ob eine bestimmte Zeichenfolge einen bestimmten Teilstring enthält?
Insbesondere möchte ich sehen, ob s1.domain.com
die 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.com
die angegebene Zeichenfolgenvariable vorhanden ist.
Antworten:
Um herauszufinden, ob eine Zeichenfolge Teilzeichenfolgen enthält, können Sie die folgende index
Funktion verwenden:
if (index($str, $substr) != -1) {
print "$str contains $substr\n";
}
Es wird die Position des ersten Auftretens von $substr
in $str
oder -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 \Q
und 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, -1
wenn keine Übereinstimmung anstelle von undef
oder 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.com
es 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::simple
alle ein wenig schien awk
-ward ...: - \
domain.com
passen 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.