PowerShell RegEx

Ja PowerShell agiert standardmäßig case insensitive bei Strings. -match ist bspw. nur ein Alias auf -imatch (was case-insensitive arbeitet). Es gibt dann noch -cmatch (was case -sensitive arbeitet), aber das steht alles in der Doku drin. It's not a bug, it's a feature.
Code:
"Book" -match "OO" # True
"Book" -match "oo" # True
"Book" -imatch "OO" # True
"Book" -imatch "oo" # True
"Book" -cmatch "OO" # False
"Book" -cmatch "oo" # True

"Book" -eq "Book" # True
"Book" -eq "BOOK" # True
"Book" -eq "book" # True
"Book" -ieq "Book" # True
"Book" -ieq "BOOK" # True
"Book" -ieq "book" # True
"Book" -ceq "Book" # True
"Book" -ceq "BOOK" # False
"Book" -ceq "book" # False
Und wenn man darüber stolpert, nutzt man einfach die korrekten Modifier, dann erhält man das gewünschte Ergebnis ohne sich direkt mit der .NET Klassenstruktur auseinandersetzen zu müssen.
Code:
"Book" -match "(?-i)OO" # False
"Book" -match "(?-i)oo" # True
"Book" -match "(?x)O      O" # True
"Book" -match "(?-x)O      O" # False
-eq ist etwas eigenartig (zumindest wenn man "1" -eq 1 nicht bedenkt), aber wie gesagt: steht alles in der Doku. Die ISE und auch VSCode bringen aber genug Werkzeuge mit, womit man mindestens darauf aufmerksam gemacht werden sollte und vielleicht auch mal nachschlägt.

1544527926983.png


Einziger Wehrmutstropfen, wo man auf die .NET Struktur zugreifen muss: wenn man alle Matches in einem String haben will. Dafür gibts leider nichts, wo man einfach über alle Hits iterieren könnte.

Da muss man .NET bemühen:
Code:
$match = ([regex]"a[a-z]").match( "foo bar baz" )
while( $match.Success )
{
  $match.value
  $match = $match.NextMatch()
}

# ar
# az
Der Rest geht problemlos in PowerShell. Man muss nur wissen, wie man es anwendet.

Aber ganz ehrlich: Die meiste Zeit beim Pattern Matching ist es vollkommen egal, ob da ein Groß- oder Kleinbuchstabe steht. Falls mal doch nicht und man wirklich etwas nach einem bestimmten Muster validieren will, nutzt man einfach -cmatch oder (?-i). Es ist und bleibt eine Scriptsprache, die standardmäßig schwach typisiert arbeitet.
 
  • Gefällt mir
Reaktionen: pizza4ever
Zurück
Oben