Articles

Like vs Match : Bataille des opérateurs de comparaison de Powershell

Powershell offre quelques moyens différents de voir si une chaîne de caractères est à l’intérieur d’une autre chaîne de caractères. La méthode la plus courante consiste à utiliser les opérateurs Like et Match. Ces deux opérateurs peuvent sembler similaires en termes de fonctionnalité mais, sous le capot, ce sont deux bêtes très différentes. Passons en revue chacun d’eux pour voir lequel gagnerait une bataille royale ! Nous ferons deux tours, avec le système de points suivant : un point pour la vitesse et un point pour la facilité de syntaxe. Pour obtenir une véritable comparaison des deux opérateurs, nous utiliserons le texte intégral du livre « Guerre et paix » de Léon Tolstoï. Pour obtenir le texte de ce livre dans une chaîne de caractères, j’utilise le cmdlet Get-Content avec le paramètre -Raw, qui attribue les 1 440 pages de contenu dans une seule chaîne de caractères plutôt que dans un tableau. $WarAndPeaceString = Get-Content C:\WarAndPeace.txt -Raw Le concours consistera à voir si le texte du roman « Guerre et Paix » contient le mot « waldo » à la fin d’une phrase, la chaîne sera donc « waldo ». Avant de commencer ce combat à mort, il est important de donner une brève explication d’un opérateur Powershell. Nous jetterons ensuite un coup d’œil à chacun de nos prétendants ; nous voulons nous souvenir de l’adversaire perdant ou, au moins, du parent le plus proche à prévenir lorsque c’est terminé.

Une brève explication des opérateurs de comparaison Powershell

Like et Match sont tous deux des opérateurs Powershell ; plus précisément, ce sont des opérateurs de comparaison. Dans leur forme la plus basique, les opérateurs de comparaison sont utilisés pour comparer des valeurs et retourner une valeur booléenne Vrai ou Faux. Cependant, cet article se concentre sur l’utilisation des opérateurs Like et Match pour trouver une chaîne de caractères à l’intérieur d’une autre chaîne. Nos deux prétendants peuvent le faire, mais chacun effectue la tâche d’une manière légèrement différente.

Meet the Like operator

L’opérateur Like est un opérateur de comparaison Powershell qui utilise des caractères génériques. Un exemple très simple pour trouver le mot « day » dans la chaîne de caractères, « It is a great day, : se déroulerait comme suit : PS> 'it is a great day' -like '*day*' Cette instruction renverrait une valeur True. Cependant, si je fais quelque chose comme ceci, cela retournerait une valeur FalsePS> 'it is a great day' -like 'day' Pourquoi cette différence ? Notez les astérisques qui entourent day dans le premier exemple. Ce sont des caractères génériques qui doivent être présents pour représenter tout type de texte de part et d’autre du mot day. En clair, le premier énoncé dit essentiellement : « La chaîne ‘it is a great day’ contient-elle le mot ‘day’, avec du texte à gauche ou à droite ? » En revanche, le deuxième énoncé dit : « La chaîne ‘c’est un grand jour’ contient-elle le mot ‘jour’, mais aucun texte à gauche et à droite ? ». L’opérateur Like fonctionne bien pour une correspondance simple comme celle-ci, lorsque vous avez une chaîne simple sans caractères spéciaux et que vous savez exactement quelle chaîne vous recherchez.

Meet the Match operator

L’opérateur Match est un autre opérateur de comparaison Powershell. Bien que similaire à Like, il est beaucoup plus Powershell (mais un peu plus compliqué). L’opérateur Match utilise des expressions régulières (regex). C’est un avantage énorme et donne à Match une longueur d’avance certaine sur Like. Cependant, si vous n’avez jamais utilisé d’expressions régulières auparavant, préparez-vous. Un collègue de travail, en décrivant les expressions régulières, a dit un jour :  » Celui qui a créé les expressions régulières devait être drogué.  » Cela ne pourrait pas être plus vrai. Reprenons notre chaîne d’exemple précédente. PS> 'it is a great day' -match '*day*' Je viens de substituer le mot likematch. À votre avis, que se passerait-il ? Cela renverrait-il True, comme notre exemple précédent, ou autre chose ? regexfailure Vous pouvez voir que cela fonctionne différemment de Like. Vous ne travaillez pas seulement avec du texte simple. Vous êtes entré dans le royaume de la regex, et les choses ne sont pas les mêmes dans le monde de la regex. Pour que cela fonctionne correctement avec l’opérateur Match, vous devriez supprimer les astérisques, car les astérisques ont une signification particulière dans le monde regex. PS> 'it is a great day' -match 'day' L’opérateur Match peut faire beaucoup plus que de simples correspondances comme celle-ci, mais pour cette bataille, je vais tenter de la rendre équitable en comparant simplement des attributs similaires. Une fois les arrière-plans éliminés, passons aux choses sérieuses.

Round No. 1 : Like vs. Match : Lequel est le plus rapide ?

Like Voyons si l’opérateur like peut trouver si notre chaîne d’exemple contient « waldo », et à quelle vitesse. waldolikeresult Plutôt rapide ! L’opérateur Like a pu trouver la correspondance en 149 millisecondes environ. Match Introduisons maintenant l’opérateur Match et voyons comment il se positionne. waldomatchresult Le gagnant est clair : un point pour l’opérateur Match ! J’aime : 0, Match : 1

Round No.2 : Like vs. Match : Facilité syntaxique

Pour que ce round soit le plus égal possible, je définis la « facilité syntaxique » comme l’opérateur le plus facile à comprendre et qui nécessite le moins de caractères. En premier lieu, l’opérateur Like. PS> $WarAndPeaceString -like '*waldo.*' Pas mal du tout avec huit caractères, mais nécessite de se souvenir des astérisques de chaque côté de notre chaîne de recherche. Match Ensuite, l’opérateur Match entre sur le ring et nous montre de quoi il est fait ! PS> $WarAndPeaceString -match 'waldo\.' Je ne vois pas d’astérisques ici, donc le nombre de caractères n’est que de sept. Cependant, qu’est-ce que cette barre oblique inverse fait ici ? C’est extrêmement déroutant. Étant donné que l’opérateur de correspondance utilise la méthode regex, celle-ci exige que vous échappiez certains caractères spéciaux dans la chaîne de recherche. C’est beaucoup trop bizarre pour un nouveau venu, donc je donne Like le point ici. J’aime : 1, Match : 1 D’après notre combat purement pince-sans-rire, il semble que les opérateurs Like et Match soient à égalité. Même si cela peut ou non être la réalité réelle, j’espère que vous avez obtenu une bonne démonstration de ce que chaque opérateur peut faire, ainsi qu’un peu sur les différences de syntaxe.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *