PowerShell v3类实例化报错求助:两种方式均执行失败
解决PowerShell v3中Regex类调用与实例化的错误
看起来你在PowerShell v3里和Regex类的调用/实例化杠上了😅,我来帮你拆解这两个错误的原因,以及给出正确的做法:
第一个错误:$regex::Replace("//hey", "")触发类型转换异常
这个错误的核心问题出在$regex变量上:
- 如果这个变量之前没被定义过,PowerShell会默认把它当作
$null,而在调用静态方法的上下文里,$null会被解析为空的System.Object[]数组; - 如果之前不小心把
$regex赋值成了数组类型,同样会出现这个问题。
而调用.NET类的静态方法时,::左边必须是类型本身,而不是普通变量或数组。
正确的静态方法调用方式应该直接使用Regex的类型名:
# 完整类型名调用 [System.Text.RegularExpressions.Regex]::Replace("//hey", "//", "") # 简化写法(PowerShell会自动识别常用.NET类型) [Regex]::Replace("//hey", "//", "")
注意:你原命令里第二个参数是空字符串,这样Replace不会做任何实际替换,我这里加上了要匹配的"//",你可以根据自己的需求调整匹配模式。
第二个错误:实例化时提示找不到new方法
这个问题是版本兼容性导致的:::new()这种构造对象的语法是PowerShell 5.0及以上才支持的,而你用的是v3,自然会报错说Regex类没有new方法。
在PowerShell v3里,要实例化.NET对象,得用New-Object cmdlet:
# 创建Regex实例,指定匹配模式 $regex = New-Object System.Text.RegularExpressions.Regex '//' # 调用实例的Replace方法 $regex.Replace("//hey", "")
额外小技巧:PowerShell原生正则运算符
其实在PowerShell里,你完全可以不用直接操作Regex类,用原生的-replace运算符更简洁:
"//hey" -replace '//', ""
内容的提问来源于stack exchange,提问作者Callum Linington
相关产品推荐
相关产品推荐

