Considérez l'extrait suivant:
"12-18" -Contains "-"
Vous penserez que cela donne true
, mais ce n’est pas le cas. Ceci sera évalué à false
à la place. Je ne sais pas pourquoi cela se produit, mais ça arrive.
Pour éviter cela, vous pouvez utiliser ceci à la place:
"12-18".Contains("-")
Maintenant, l'expression sera évaluée comme vraie.
Pourquoi le premier extrait de code se comporte-t-il de la sorte? y a-t-il quelque chose de spécial à propos de -
qui ne fonctionne pas bien avec -Contains
? Le documentation ne mentionne rien à ce sujet.
L'opérateur _-Contains
_ ne fait pas de comparaisons de sous-chaînes et la correspondance doit figurer sur une chaîne complète et est utilisée pour rechercher des collections.
À partir de la documentation que vous avez liée à:
-Contains Description: Opérateur de confinement. Indique si une collection de valeurs de référence comprend une seule valeur de test.
Dans l'exemple que vous avez fourni, vous travaillez avec une collection contenant un seul élément de chaîne.
Si vous lisez la documentation à laquelle vous avez accédé, vous verrez un exemple illustrant ce problème:
Exemples:
_PS C:\> "abc", "def" -Contains "def"
True
PS C:\> "Windows", "PowerShell" -Contains "Shell"
False #Not an exact match
_
Je pense que ce que vous voulez, c'est l'opérateur -Match
:
_"12-18" -Match "-"
_
Ce qui retourne True
.
Important: Comme indiqué dans les commentaires et dans la documentation liée , il convient de noter que le _-Match
_ L’opérateur utilise expressions régulières pour effectuer une correspondance de texte.
_-Contains
_ est en fait un opérateur de collection. C'est vrai si la collection contient l'objet. Cela ne se limite pas aux chaînes.
-match
_ ET _-imatch
sont des correspondeurs de chaîne d'expression régulière et définissent des variables automatiques à utiliser avec les captures.
_-like
_, _-ilike
_ sont des correspondants de type SQL.
Vous pouvez utiliser like
:
"12-18" -like "*-*"
Ou split
pour contains
:
"12-18" -split "" -contains "-"
like
est le meilleur, ou du moins le plus facile.match
est utilisé pour les comparaisons de regex.