Рассмотрим следующий фрагмент:
"12-18" -Contains "-"
Вы думаете, что это оценивает true
, но это не так. Это оценит false
вместо. Я не уверен, почему это происходит, но это происходит.
Чтобы избежать этого, вы можете использовать это вместо:
"12-18".Contains("-")
Теперь выражение оценит как истинное.
Почему первый фрагмент кода ведет себя так? есть что-то особенное -
, с чем не очень приятно играть -Contains
? В документации ничего не говорится об этом.
"12-18".Contains("-")
Contains
оператором powershell и методом.Contains()
.NETString
.-Match
используется регулярное выражение. Это означает, что строковый параметр - это регулярное выражение, а не обычная строка. Например,"hello" -Match "."
вернет true, потому что"."
это регулярное выражение, где '.' будет соответствовать любому персонажу. Чтобы проверить, содержит ли строка точку остановки:"hello" -Match "\."
(возвращает false)-Contains
на самом деле оператор коллекции. Это правда, если коллекция содержит объект. Он не ограничен строками.-match
и-imatch
являются сопоставителями строк регулярных выражений и устанавливают автоматические переменные для использования с захватами.-like
,-ilike
Являются SQL-подобный matchers.источник
Вы можете использовать
like
:Или
split
дляcontains
:источник
like
самый лучший или, по крайней мере, самый простой.match
используется для сравнения регулярных выражений.Ссылка: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_comparison_operators?view=powershell-6
источник