Comment puis-je vérifier si une chaîne donnée contient une certaine sous-chaîne, en utilisant Perl?
Plus spécifiquement, je veux voir si s1.domain.com
est présent dans la variable de chaîne donnée.
Comment puis-je vérifier si une chaîne donnée contient une certaine sous-chaîne, en utilisant Perl?
Plus spécifiquement, je veux voir si s1.domain.com
est présent dans la variable de chaîne donnée.
Réponses:
Pour savoir si une chaîne contient une sous-chaîne, vous pouvez utiliser la index
fonction:
if (index($str, $substr) != -1) {
print "$str contains $substr\n";
}
Il renverra la position de la première occurrence de $substr
in $str
, ou -1 si la sous-chaîne n'est pas trouvée.
Une autre possibilité est d'utiliser des expressions régulières, ce qui fait la renommée de Perl:
if ($mystring =~ /s1\.domain\.com/) {
print qq("$mystring" contains "s1.domain.com"\n);
}
Les barres obliques inverses sont nécessaires car a .
peut correspondre à n'importe quel caractère. Vous pouvez contourner ce problème en utilisant les opérateurs \Q
et \E
.
my $substring = "s1.domain.com";
if ($mystring =~ /\Q$substring\E/) {
print qq("$mystring" contains "$substring"\n);
}
Ou, vous pouvez faire comme eugene y indiqué et utiliser la fonction d' index . Juste un mot d'avertissement: Index renvoie un -1
lorsqu'il ne trouve pas de correspondance au lieu d'un undef
ou 0
.
C'est donc une erreur:
my $substring = "s1.domain.com";
if (not index($mystring, $substr)) {
print qq("$mystring" doesn't contains "$substring"\n";
}
Ce sera faux si s1.domain.com
c'est au début de votre chaîne. J'ai personnellement été brûlé à ce sujet plus d'une fois.
index()
c'est plus rapide que les regexps dans le cas simple?
=~
, index()
, ~~
et match::simple
tout semblait un peu awk
-ward ...: - \
domain.com
correspondre subdomain.domain.com
avec le REGEX ci-dessus, des idées?
Exemple de sous-chaîne insensible à la casse
Ceci est une extension de la réponse d'Eugene, qui convertit les chaînes en minuscules avant de vérifier la sous-chaîne:
if (index(lc($str), lc($substr)) != -1) {
print "$str contains $substr\n";
}
:
).