Rozważ następujący fragment:
"12-18" -Contains "-"
Można by pomyśleć, że to się ocenia true
, ale tak nie jest. false
Zamiast tego zostanie to ocenione . Nie jestem pewien, dlaczego tak się dzieje, ale tak się dzieje.
Aby tego uniknąć, możesz zamiast tego użyć tego:
"12-18".Contains("-")
Teraz wyrażenie zostanie ocenione jako prawda.
Dlaczego pierwszy fragment kodu zachowuje się w ten sposób? czy jest w tym coś wyjątkowego -
, co nie pasuje do przyjemności -Contains
? Dokumentacja nie wspomina nic na ten temat.
"12-18".Contains("-")
Contains
operatorem PowerShell a metodą.Contains()
.NETString
.-Match
używa wyrażenia regularnego. Oznacza to, że parametr ciągu jest wyrażeniem regularnym, a nie zwykłym ciągiem. Na przykład"hello" -Match "."
zwróci wartość true, ponieważ"."
jest wyrażeniem regularnym, w którym „.” będzie pasować do dowolnego znaku. Aby sprawdzić, czy ciąg zawiera kropkę:"hello" -Match "\."
(zwraca false)-Contains
jest w rzeczywistości operatorem kolekcji. Prawdą jest, że kolekcja zawiera obiekt. Nie ogranicza się do strun.-match
i-imatch
są dopasowującymi łańcuchami wyrażeń regularnych i ustawiają zmienne automatyczne do użycia z przechwytywaniami.-like
,-ilike
są odpowiednikami podobnymi do SQL.źródło
Możesz użyć
like
:Lub
split
zacontains
:źródło
like
jest najlepszy, a przynajmniej najłatwiejszy.match
jest używany do porównań wyrażeń regularnych.Źródła: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_comparison_operators?view=powershell-6
źródło