Regex 是否可以使用PowerShell-match运算符测试版本字符串?
我想使用PowerShell检查操作系统版本。脚本如下所示:Regex 是否可以使用PowerShell-match运算符测试版本字符串?,regex,powershell,match,version,Regex,Powershell,Match,Version,我想使用PowerShell检查操作系统版本。脚本如下所示: $a = "6.3.9600" $a -match "6.0" 我在PowerShell ISE上运行此脚本,此脚本返回$true。为什么?PowerShell-match是一种正则表达式匹配,其中句点匹配任何字符。因此,对于您的代码: $a = "6.3.9600" $a -match "6.0" 找到匹配项,如“600”“匹配项”“6.0” 如果您想专门搜索句点,则需要通过将其替换为\,将其转义。: "600" -match
$a = "6.3.9600"
$a -match "6.0"
我在PowerShell ISE上运行此脚本,此脚本返回
$true
。为什么?PowerShell-match是一种正则表达式匹配,其中句点
匹配任何字符。因此,对于您的代码:
$a = "6.3.9600"
$a -match "6.0"
找到匹配项,如“600”
“匹配项”“6.0”
如果您想专门搜索句点,则需要通过将其替换为\,将其转义。
:
"600" -match "6.0"
True
"600" -match "6\.0"
False
$a = "6.3.9600"
$a -match "6\.0"
False
对于测试版本字符串的特定用例,.NET提供了一个在这里很有用的方法。您可以创建这样的实例
$version = [Version] $a
$version = [Version]::Parse($a)
PS> $version.Major -eq 6
True
PS> $version.Major -eq 6 -and $version.Minor -eq 3
True
PS> $version.Major -eq 6 -and $version.Minor -ge 3
True
PS> $version.Major -eq 6 -and $version.Minor -gt 3
False
…或者像这样
$version = [Version] $a
$version = [Version]::Parse($a)
PS> $version.Major -eq 6
True
PS> $version.Major -eq 6 -and $version.Minor -eq 3
True
PS> $version.Major -eq 6 -and $version.Minor -ge 3
True
PS> $version.Major -eq 6 -and $version.Minor -gt 3
False
有主版本、次版本、生成和修订的属性
PS> $version
Major Minor Build Revision
----- ----- ----- --------
6 3 9600 -1
然后您可以执行这样的测试
$version = [Version] $a
$version = [Version]::Parse($a)
PS> $version.Major -eq 6
True
PS> $version.Major -eq 6 -and $version.Minor -eq 3
True
PS> $version.Major -eq 6 -and $version.Minor -ge 3
True
PS> $version.Major -eq 6 -and $version.Minor -gt 3
False
powershell可以为此使用dotnet
[version]
类型加速器。它了解版本号,因此知道6.0.9.1
小于6.0.11.1
。这是一个演示
$FoundVersion = [version]'6.3.9600'
$WantedVersion = [version]'6.0'
'Is it greater or equal? = {0}' -f ($FoundVersion -ge $WantedVersion)
'Is it equal? = {0}' -f ($FoundVersion -eq $WantedVersion)
输出
Is it greater or equal? = True
Is it equal? = False
使用
^6.0
也可以将匹配锚定到输入字符串的开头,这样就不会匹配,例如,如果发布版本6.6.0
,这就是匹配的答案。我忘了比赛用的是regx。。。非常感谢。这与powershell匹配使用情况无关。但它确实符合我的要求。非常感谢@AaronHu-是的,你使用-match
似乎是一种非常迂回的方式来获得答案-一旦人们知道[version]
类型加速器。我看到你已经对正则表达式处理圆点的方式有了答案。不客气!好主意,这就是我真正想要的。