Windows-Praxis

Workshop: In der PowerShell mit regulären Ausdrücken arbeiten

Es geht noch mehr: Bereiche untersuchen, Groß- und Kleinschreibung …

Während sich die geschweiften Klammern, wie gerade gezeigt, zum Abprüfen einer bestimmten Anzahl von Übereinstimmungen einsetzen lassen, können die eckigen Klammer "[ ]" dazu verwendet werden, einen bestimmten Bereich von Zeichen zu vergleichen. Werden dabei zwischen den Klammer mehrere Zeichen angeben, so ist die Bedingung dann zutreffend, wenn mindestens eines dieser Zeichen im zu untersuchenden Objekt zu finden ist:

PS c:\ > $Eingabe=‘TecChannel Rulez‘

PS c:\> $Eingabe -match "[cz]"

True

PS c:\> $matches

Name Value

0 c

Wie bereits bekannt, stoppt die Shell den Vergleich, sobald eine erste Übereinstimmung gefunden wurde, was in diesem Fall dem ersten Auftauchen des Buchstaben "c" entspricht. Es ist dabei ebenfalls möglich, einen Bereich anzugeben, aus dem beispielsweise die Buchstaben stammen sollen:

PS c:\ > $Eingabe=‘TecChannel Rulez‘

PS c:\> $Eingabe -match "[b-m]"

True

PS c:\> $matches

Name Value

0 e

Hier wird das erste Zeichen gefunden, das aus dem Bereich von "b" bis "m" (einschließlich!) stammt, somit ist das "e" der erste Treffer. In vielen anderen Script-Sprachen wird an dieser Stelle von den regulären Ausdrücken auch eine Case-sensitive Unterscheidung unterstützt. Und so findet man leider auch in vielen Beschreibungen zur PowerShell immer wieder die falsche Behauptung, unter der PowerShell würde diese Vorgehensweise ebenso funktionieren. Testen Sie das einfach, indem Sie mit unserem Teststring (oder natürlich auch einer anderen Zeichenkette) nach dem ersten Vorkommen eines Großbuchstabens suchen. Der folgende Ansatz:

PS c:\ > $Eingabe=‘TecChannel Rulez‘

PS c:\> $Eingabe -match "[A-D]"

True

PS c:\> $matches

Name Value

0 c

sollte dann ja eigentlich erst beim zweiten "c" stoppen, was aber leider weder unter der Version 2.0 noch unter der aktuellen Version 3.0 bei Windows 8 und Windows Server 2012 nicht funktioniert. Hier muss unter der PowerShell eine Variante des -match-Operators zum Einsatz kommen. Wollen Sie reguläre Zeichen Case-sensitiv untersuchen, so müssen Sie dazu -cmatch verwenden, und Sie bekommen das gewünschte Ergebnis:

PS c:\ > $Eingabe=‘TecChannel Rulez‘

PS c:\> $Eingabe -cmatch "[A-D]"

True

PS c:\> $matches

Name Value

0 C