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.
string
perl
string-matching
Poisson Belgin
la source
la source
:
).Une autre possibilité est d'utiliser des expressions régulières, ce qui fait la renommée de Perl:
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
.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'unundef
ou0
.C'est donc une erreur:
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.la source
index()
c'est plus rapide que les regexps dans le cas simple?=~
,index()
,~~
etmatch::simple
tout semblait un peuawk
-ward ...: - \domain.com
correspondresubdomain.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:
la source
fc
est recommandélc
pour les comparaisons insensibles à la casse.