StringsWieFindeIchHerausObEineZeichenketteVorkommt
Strings - Mustererkennung
Wie finde ich heraus, ob in einem String eine bestimmte Zeichenkette vorkommt?
(
Autor: Ishka & perl-community)
Ich habe einen String, und möchte wissen, ob eine bestimmte Zeichenkette / ein bestimmtes
Muster darin vorkommt bzw. nicht vorkommt:
$string='Das ist nur ein Musterstring';
if ($string=~ m/string/)
{
print 'Das Muster >string< kommt vor'
}
if ($string!~ m/nicht/)
{
print 'Das Muster >nicht< kommt nicht vor'
}
Erklärung:
=~ ist ein Operator für Strings.
Das Gegenteil von =~ ist !~
m// ist ein Mustererkennungsoperator
if ($string=~ m/string/)
{
print 'Das Muster >string< kommt vor'
}
in dieser Zeile prüft der Operator =~, ob in dem (vorher zugewiesenen) String
"Das ist nur ein Musterstring" der String "string" enthalten ist (der Ausdruck zwischen m//).
Da in "Das ist nur ein Muster
string" "string" tatsächlich enthalten ist, führt er die
if-Anweisung auch aus.
if ($string!~ m/nicht/)
{
print 'Das Muster >nicht< kommt nicht vor'
}
In dieser Zeile prüft !~, ob in "Das ist nur ein Musterstring" "nicht" vorkommt, allerdings
mit dem Unterschied zu vorhin, daß diesmal die if-Anweisung ausgeführt wird, falls
der zu erkennende String nicht vorkommt.
Außer m// gibt es noch s/// und tr///, die aber hier nicht näher behandelt werden:
$text="Hallo Welt\n";
$text=~s/llo/lli hallo/;
print $text; # Halli hallo Welt
$text=~tr/i/o/;
print $text; # Hallo hallo Welt
Ergänzungen
finden des Substrings mit index()
Man kann auch mit index() überprüfen, ob ein String in dem größeren String vorkommt:
$string = 'Dies ist ein Musterstring';
if(index($string,'string') != -1){
print "'string' ist im String enthalten.\n";
}
else{
print "'string' ist nicht enthalten.\n";
}
siehe perldoc -f index
-
ReneeBaecker - 15 Apr 2005