Articles

Like vs. Match: Kampf der Powershell-Vergleichsoperatoren

Powershell bietet ein paar verschiedene Möglichkeiten, um festzustellen, ob eine Zeichenkette innerhalb einer anderen Zeichenkette liegt. Die häufigste Methode ist die Verwendung der Like- und Match-Operatoren. Diese beiden Operatoren scheinen sich in ihrer Funktionalität zu ähneln, aber unter der Haube sind sie zwei sehr unterschiedliche Biester. Schauen wir uns die beiden Operatoren an, um zu sehen, welcher von ihnen ein Battle Royale gewinnen würde! Es gibt zwei Runden mit folgendem Punktesystem: ein Punkt für die Geschwindigkeit und ein Punkt für die Einfachheit der Syntax. Um einen echten Vergleich der beiden Operatoren zu erhalten, werden wir den gesamten Text des Buches „Krieg und Frieden“ von Leo Tolstoi verwenden. Um den Text dieses Buches in eine Zeichenkette zu bekommen, verwende ich das Cmdlet Get-Content mit dem Parameter -Raw, das die 1.440 Seiten Inhalt in einer einzelnen Zeichenkette und nicht in einem Array zuordnet. $WarAndPeaceString = Get-Content C:\WarAndPeace.txt -Raw Geprüft werden soll, ob der Text im Roman „Krieg und Frieden“ das Wort „waldo“ am Ende eines Satzes enthält, die Zeichenkette wird also „waldo“ sein. Bevor dieser Kampf auf Leben und Tod beginnt, ist es wichtig, eine kurze Erklärung eines Powershell-Operators zu geben. Danach werden wir uns jeden unserer Kontrahenten ansehen; wir wollen uns den unterlegenen Gegner merken oder zumindest die nächsten Angehörigen benachrichtigen, wenn es vorbei ist.

Eine kurze Erklärung der Powershell-Vergleichsoperatoren

Like und Match sind beides Powershell-Operatoren; genauer gesagt sind sie Vergleichsoperatoren. Im Grunde genommen werden Vergleichsoperatoren verwendet, um Werte zu vergleichen und entweder einen booleschen Wert True oder False zurückzugeben. Dieser Artikel konzentriert sich jedoch auf die Verwendung der Like- und Match-Operatoren, um eine Zeichenfolge innerhalb einer anderen Zeichenfolge zu finden. Beide unserer Konkurrenten können dies, aber jeder führt die Aufgabe auf eine etwas andere Weise aus.

Mit dem Like-Operator

Der Like-Operator ist ein Powershell-Vergleichsoperator, der Platzhalter verwendet. Ein sehr einfaches Beispiel, um das Wort „day“ in der Zeichenfolge „It is a great day,:“ zu finden, würde etwa so aussehen: PS> 'it is a great day' -like '*day*' Diese Anweisung würde einen True-Wert zurückgeben. Wenn ich jedoch etwas wie dieses mache, würde es einen False Wert zurückgeben: PS> 'it is a great day' -like 'day' Warum der Unterschied? Beachten Sie die Sternchen, die day im ersten Beispiel umgeben. Dies sind Platzhalter, die vorhanden sein müssen, um jede Art von Text auf beiden Seiten des Wortes day darzustellen. Im Klartext bedeutet die erste Anweisung im Grunde: „Enthält die Zeichenkette ‚Es ist ein großer Tag‘ das Wort ‚Tag‘ mit beliebigem Text links oder rechts davon?“ Währenddessen sagt die zweite Anweisung: „Hat die Zeichenkette ‚it is a great day‘ das Wort ‚day‘ darin, aber keinen Text links und rechts davon?“ Der Like-Operator eignet sich gut für einen einfachen Abgleich wie diesen, wenn Sie eine einfache Zeichenfolge ohne Sonderzeichen haben und genau wissen, nach welcher Zeichenfolge Sie suchen.

Kennen Sie den Match-Operator

Der Match-Operator ist ein weiterer Vergleichsoperator der Powershell. Obwohl er Like ähnlich ist, ist er viel mehr Powershell (aber auch ein wenig komplizierter). Der Match-Operator verwendet reguläre Ausdrücke (regex). Dies ist ein enormer Vorteil und gibt Match einen deutlichen Vorsprung gegenüber Like. Wenn Sie jedoch noch nie mit regulären Ausdrücken gearbeitet haben, sollten Sie sich vorbereiten. Ein Kollege sagte einmal, als er reguläre Ausdrücke beschrieb: „Wer auch immer reguläre Ausdrücke erfunden hat, muss auf Drogen gewesen sein.“ Das könnte nicht zutreffender sein. Nehmen wir wieder unsere vorherige Beispielzeichenkette. PS> 'it is a great day' -match '*day*' Ich habe gerade das Wort like für match ersetzt. Was denken Sie, würde passieren? Würde es True, wie unser vorheriges Beispiel zurückgeben, oder etwas anderes? regexfailure Sie können sehen, dass es anders funktioniert als Like. Sie arbeiten hier nicht nur mit einfachem Text. Sie haben das Reich der Regex betreten, und in der Welt der Regex sind die Dinge nicht dieselben. Damit dies mit dem Match-Operator funktioniert, müssen Sie die Sternchen entfernen, denn Sternchen haben in der Regex-Welt eine besondere Bedeutung. PS> 'it is a great day' -match 'day' Der Match-Operator kann viel mehr als nur einfache Übereinstimmungen wie diese, aber für diesen Kampf werde ich versuchen, es fair zu machen, indem ich nur ähnliche Attribute vergleiche. Nachdem die Hintergründe geklärt sind, können wir zur Sache kommen.

Runde Nr. 1: Like vs. Match: Was ist schneller?

Lassen Sie uns sehen, ob der Like-Operator herausfinden kann, ob unsere Beispielzeichenkette „waldo“ enthält, und wie schnell das war. waldolikeresult Ziemlich schnell! Der Like-Operator konnte die Übereinstimmung innerhalb von etwa 149 Millisekunden finden. Match Jetzt wollen wir den Match-Operator einsetzen und sehen, wie er abschneidet. waldomatchresult Der Gewinner hier ist klar; ein Punkt für den Match-Operator! Like: 0, Match: 1

Runde Nr.2: Like vs. Match: Syntax-Leichtigkeit

Um diese Runde so gleichwertig wie möglich zu gestalten, definiere ich „Syntax-Leichtigkeit“ als den Operator, der am einfachsten zu verstehen ist und die wenigsten Zeichen benötigt. Den Anfang macht der Like-Operator. PS> $WarAndPeaceString -like '*waldo.*' Mit acht Zeichen gar nicht schlecht, erfordert aber, dass Sie sich die Sternchen auf beiden Seiten unseres Suchstrings merken. Match Als nächstes steigt der Match-Operator in den Ring und zeigt uns, was er drauf hat! PS> $WarAndPeaceString -match 'waldo\.' Ich sehe hier keine Sternchen, also beträgt die Zeichenanzahl nur sieben. Wie auch immer, was macht dieser Backslash da drin? Das ist extrem verwirrend. Da der Match-Operator regex verwendet, verlangt regex, dass Sie bestimmte Sonderzeichen im Suchstring auslassen. Das ist für einen Neueinsteiger viel zu unübersichtlich, deshalb gebe ich hier Like den Punkt. Like: 1, Match: 1 Aus dem reinen Wortgefecht geht hervor, dass die Operatoren Like und Match gleichwertig sind. Auch wenn das vielleicht nicht der Realität entspricht, hoffe ich, dass Sie eine gute Demonstration dessen bekommen haben, was jeder Operator tun kann, zusammen mit ein wenig über die Syntaxunterschiede.

Eine Antwort schreiben

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.