Yuuri
Fleet Admiral
- Registriert
- Okt. 2010
- Beiträge
- 13.928
Ja PowerShell agiert standardmäßig case insensitive bei Strings.
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.
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:
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
-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
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.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
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.