106 votes

vérifier si la chaîne contient une sous-chaîne

Comment puis-je vérifier si une chaîne donnée contient une certaine sous-chaîne, en utilisant Perl?

Plus précisément, je veux voir si s1.domain.com est présent dans la variable de chaîne donnée: si c'est le cas, il suffit d'avoir 1 section; sinon, en avoir un autre.

222voto

eugene y Points 37378

Vous pouvez utiliser la fonction index :

 if (index($str, $substr) != -1) {
    print "$str contains $substr\n";
} 
 

55voto

David W. Points 49436

Une autre possibilité est d'utiliser des expressions régulières qui est ce que Perl est célèbre pour:

if ($mystring =~ /s1\.domain\.com/) {
   print qq("$mystring" contains "s1.domain.com"\n);
}

Les barres obliques inverses sont nécessaires, car une . peut correspondre à n'importe quel caractère. Vous pouvez contourner ce problème en utilisant l' \Q et \E opérateurs.

my $substring = "s1.domain.com";
    if ($mystring =~ /\Q$substring\E/) {
   print qq("$mystring" contains "$substring"\n);
}

Ou, vous pouvez faire comme eugène y a déclaré et l'utilisation de l' indice de la fonction. Juste un mot d'avertissement: rendement de l'Indice d'un -1 quand il ne peut pas trouver une correspondance à la place d'un undef ou 0.

Donc, c'est une erreur:

my $substring = "s1.domain.com";
if (not index($mystring, $substr)) {
    print qq("$mystring" doesn't contains "$substring"\n";
} 

Ce sera faux si l' s1.domain.com est au début de votre chaîne. J'ai personnellement été brûlé sur plus d'une fois.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X