请考虑以下代码片段:
"12-18" -Contains "-"
你会认为这算true
,但事实并非如此。这将改为false
计算。我不确定为什么会发生这种情况,但它确实如此。
为避免这种情况,您可以改用它:
"12-18".Contains("-")
现在,表达式的计算结果将为 true。
为什么第一个代码片段的行为是这样的?-
有什么特别之处不适合-Contains
吗?文档没有提到任何关于它的内容。
-Contains
运算符不执行子字符串比较,并且匹配必须位于完整字符串上,并且用于搜索集合。
从您链接到的文档:
-包含 说明:遏制操作员。告知引用值的集合是否包含单个测试值。
在您提供的示例中,您正在使用仅包含一个字符串项的集合。
如果您阅读了链接到的文档,您将看到一个演示此行为的示例:
例子:
PS C:> "abc", "def" -Contains "def"
True
PS C:> "Windows", "PowerShell" -Contains "Shell"
False #Not an exact match
我认为你想要的是-Match
运算符:
"12-18" -Match "-"
返回True
.
重要提示:正如注释和链接文档中所指出的,应该注意的是,-Match
运算符使用正则表达式来执行文本匹配。
-Contains
实际上是一个集合运算符。如果集合包含对象,则为 true。它不限于字符串。
-match
和 -imatch
是正则表达式字符串匹配器,并设置用于捕获的自动变量。
-like
,-ilike
是类似SQL的匹配器。
like
:
"12-18" -like "*-*"
或split
contains
:
"12-18" -split "" -contains "-"
-
like
是最好的,或者至少是最简单的。 -
match
用于正则表达式比较。
参考:关于比较运算符