Regex 是否可以使用PowerShell-match运算符测试版本字符串?

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

我想使用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 "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]
类型加速器。我看到你已经对正则表达式处理圆点的方式有了答案。不客气!好主意,这就是我真正想要的。