考虑下面的代码片段:
"12-18" -Contains "-"
你可能会认为这是正确的,但事实并非如此。这将计算为false。我不知道为什么会这样,但确实如此。
为了避免这种情况,你可以使用这个:
"12-18".Contains("-")
现在表达式的值将为true。
为什么第一个代码片段是这样的?是不是有什么特别的-不适合-含有?文档中没有提到任何关于它的内容。
考虑下面的代码片段:
"12-18" -Contains "-"
你可能会认为这是正确的,但事实并非如此。这将计算为false。我不知道为什么会这样,但确实如此。
为了避免这种情况,你可以使用这个:
"12-18".Contains("-")
现在表达式的值将为true。
为什么第一个代码片段是这样的?是不是有什么特别的-不适合-含有?文档中没有提到任何关于它的内容。
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实际上是一个集合运算符。如果集合包含该对象,则为真。它不局限于字符串。
-match和- immatch是正则表达式字符串匹配器,并设置自动变量用于捕获。
-like, -ilike是类sql的匹配器。