PowerShell 和 -contains 运算符



请考虑以下代码片段:

"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用于正则表达式比较。

参考:关于比较运算符

相关内容

最新更新