Windows-Praxis

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

Metazeichen, Suchmuster und was sie bewirken

Aber dazu ist es zunächst einmal wichtig, kurz zu erläutern, was sich hinter dem Begriff reguläre Ausdrücke eigentlich verbirgt. Grundsätzlich handelt es sich dabei um ein Muster (eine Zeichenfolge), die Daten beschreibt. So repräsentiert dann ein solcher Ausdruck immer eine bestimmte Art von Daten im Suchmuster.

Dazu werden auch sogenannte Metazeichen eingesetzt. Die wichtigsten Zeichen - die auch von der PowerShell verwendet werden - sind die folgenden:

., ^, $, [], { }, *, ?, \

wobei es sich hierbei keinesfalls um eine vollständige Aufzählung der bei den regulären Ausdrücken zum Einsatz kommenden Metazeichen handelt.

Wenn es sich also bei einem regulären Ausdruck lediglich um ein Muster handelt, was macht die PowerShell dann mit diesem Muster? Sie benutzt es dazu, es mit den ihr übergebenen Daten zu vergleichen. Hier ein einfaches Beispiel:

PS C: \> $Eingabe=‘TecChannel‘

Bei dem Objekt, das wir hier der Variablen "Eingabe" zugewiesen haben, handelt es sich eindeutig um eine Zeichenkette (String). Die regulären Ausdrücke in der PowerShell arbeiten mit Zeichenklassen, wie sie auch im Microsoft-.NET-Framework 3.5 zur Verfügung stehen. Um mithilfe des match-Operators festzustellen, ob es sich bei einem Objekt beispielsweise um ein "Wortzeichen" handelt, kann der folgende Aufruf eingesetzt werden:

PS C:\> $Eingabe -match "\w"True

Als "Wortzeichen" wird hierbei die Menge der Zeichen von a-z sowie A-Z und 0-9 angesehen. Wichtig hierbei: Soll dahingehend verglichen werden, ob es sich um ein solches Wortzeichen handelt, dann muss hinter dem Escape-Zeichen "\" ein kleines "w" folgen - an dieser Stelle wird sehr wohl zwischen Groß- und Kleinschreibung unterschieden. Kommt ein großes "W" zum Einsatz, so wird auf "Nicht-Wortzeichen" verglichen. Ein Beispiel dafür wäre ein Leerzeichen im String. So wird dann der folgende Aufruf:

PS C:\> $Eingabe -match "\W"False

logischerweise als unrichtig (False) angezeigt. Die PowerShell vergleicht bei diesem Aufruf, wie wir ihn hier angegeben haben, das zu untersuchende Muster so lange, bis die Bedingung zutrifft. Dies lässt sich schön durch das automatisch angelegte und bei einem Aufruf von -match auch automatisch gefüllte Objekt "$matches" zeigen. Das sieht dann bei unserem ersten Aufruf folgendermaßen aus:

PS C:\> $Eingabe=‘TecChannel‘

PS C:\> $Eingabe -match "\w"

True

PS C:\ $matches

Name Value

0 T

Das mag grundsätzlich ganz praktisch sein, aber viel häufiger wird es wohl sinnvoll sein, genauer auf Übereinstimmung mit dem Suchmuster zu testen. Hier kommen die schon zuvor erwähnten Metazeichen ins Spiel. Sie modifizieren den Vergleich folgendermaßen:

  • *: 0 oder beliebig viele Übereinstimmungen mit dem Zeichen oder der Zeichenklasse

  • +: mindestens eine oder beliebig viele Übereinstimmungen mit dem Zeichen oder der Zeichenklasse

  • ?: genau eine Übereinstimmung mit dem Zeichen oder der Zeichenklasse

  • ^: Übereinstimmung mit dem Beginn der Zeichenfolge oder Zeichenklasse

  • $: Übereinstimmung mit dem Ende der Zeichenfolge oder Zeichenklasse