从 powershell 正则表达式匹配中提取值

Extract value from powershell regex matches

作为 powershell 中构建脚本的一部分,我正在尝试使用正则表达式从字符串中提取版本号。假定数字的格式为 xx.yy(例如 10.6)我需要整数部分(在本例中为 10)和小数部分(例如:6)

我想要一种方法来检查我的模式是否存在,然后提取数字。 (我是 powershell 的新手,我尽量避免使用 C# 函数,而是使用 powershell 本身。)

我试过这样做:

$integralPart="A"
$fractionPart="B"

function GetVersion {
    param([string]$strVersion)
    $integralPattern="^[0-9]+(?=\.)" 
    $fractionalPattern="(?<=\.)[0-9]+$"

    #Check if string consists of an integral and fractional part
    If ($strVersion -match $integralPattern -eq $True -and $strVersion -match $fractionalPattern -eq $True)
    {
        $strVersion -match $integralPattern
        $integralPart = $matches[0]

        $strVersion -match $fractionalPattern
        $fractionalPart = $matches[0]
    } 
    else
    {
        Write-Host "You did not enter a double with an integer and a fractional part (eg. 10.6)"
        Exit
    }
}

GetVersion (Read-Host 'Enter program version')
Write-Host $integralPart
Write-Host $fractionPart

在这样做时,我希望 $integralPart 和 $fractionalPart 包含我的数字,因为它们匹配它们应该的值

谁能解释一下这是如何做到的?

您需要告诉 PS 这些变量来自 $global:

的全局范围
$integralPart="A"
$fractionPart="B"

function GetVersion {
    param([string]$strVersion)
    $integralPattern="^[0-9]+(?=\.)" 
    $fractionalPattern="(?<=\.)[0-9]+$"

    #Check if string consists of an integral and fractional part
    If ($strVersion -match $integralPattern -eq $True -and $strVersion -match $fractionalPattern -eq $True)
    {
        $strVersion -match $integralPattern
        $global:integralPart = $matches[0]   // SEE HERE

        $strVersion -match $fractionalPattern
        $global:fractionPart = $matches[0]   // SEE HERE
    } 
    else
    {
        Write-Host "You did not enter a double with an integer and a fractional part (eg. 10.6)"
        Exit
    }
}

GetVersion "10.6"
Write-Host $integralPart
Write-Host $fractionPart

输出:

True
True
10
6

此外,您有一个错字:在 GetVersion 中,您有 $fractionalPart 而全局变量称为 $fractionPart