Considérez l'extrait de code suivant:
"12-18" -Contains "-"
Vous pensez que cela vaut true
, mais ce n'est pas le cas. Cela évaluera à la false
place. Je ne sais pas pourquoi cela se produit, mais c'est le cas.
Pour éviter cela, vous pouvez utiliser ceci à la place:
"12-18".Contains("-")
Maintenant, l'expression sera évaluée à vrai.
Pourquoi le premier extrait de code se comporte-t-il comme ça? y a-t-il quelque chose de spécial -
qui ne joue pas bien avec -Contains
? La documentation n'en mentionne rien.
"12-18".Contains("-")
Contains
opérateur PowerShell et la méthode.Contains()
.NETString
.-Match
utilise regex. Cela signifie que le paramètre de chaîne est une expression régulière, pas une chaîne normale. Par exemple,"hello" -Match "."
retournera true, car"."
est une expression régulière où un '.' correspondra à n'importe quel caractère. Pour vérifier si une chaîne contient un point:"hello" -Match "\."
(renvoie false)-Contains
est en fait un opérateur de collecte. C'est vrai si la collection contient l'objet. Il n'est pas limité aux chaînes.-match
et-imatch
correspondent à des chaînes d'expressions régulières et définissent des variables automatiques à utiliser avec les captures.-like
,-ilike
sont des correspondants de type SQL.la source
Vous pouvez utiliser
like
:Ou
split
pourcontains
:la source
like
est le meilleur, ou du moins le plus simple.match
est utilisé pour les comparaisons regex.Référence: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_comparison_operators?view=powershell-6
la source