为了账号安全,请及时绑定邮箱和手机立即绑定

PowerShell和-contains运算符

PowerShell和-contains运算符

慕侠2389804 2019-10-11 10:37:14
考虑以下代码段:"12-18" -Contains "-"您可能以为这是true,但不是。这将评估来false代替。我不确定为什么会这样,但是确实如此。为了避免这种情况,您可以改用以下方法:"12-18".Contains("-")现在,表达式将评估为true。为什么第一个代码段的行为如此?有什么特别之处-不能很好地解决-Contains吗?该文档没有提及任何内容。
查看完整描述

3 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

该-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运算符使用正则表达式执行文本匹配。


查看完整回答
反对 回复 2019-10-11
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

-Contains实际上是一个集合运算符。如果集合包含对象,则为true。它不仅限于字符串。


-match和-imatch是正则表达式字符串匹配器,并设置自动变量以与捕获一起使用。


-like,-ilike是类似SQL的匹配器。


查看完整回答
反对 回复 2019-10-11
?
茅侃侃

TA贡献1842条经验 获得超21个赞

您可以使用like:


"12-18" -like "*-*"

或split为contains:


"12-18" -split "" -contains "-"


查看完整回答
反对 回复 2019-10-11
  • 3 回答
  • 0 关注
  • 837 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信