powershell 中用于获取程序集版本号的正则表达式
Regex in powershell for getting assembly version number
我正在尝试创建一个脚本,用于从解决方案中找到并 return 程序集版本。它涵盖了一些测试场景,但我找不到正确的正则表达式来检查版本是否格式正确(1.0.0.0 没问题,但是 1.0.o.0)并且包含 4 位数字?这是我的代码。
function Get-Version-From-SolutionInfo-File($path="$pwd\SolutionInfo.cs"){
$RegularExpression = [regex] 'AssemblyVersion\(\"(.*)\"\)'
$fileContent = Get-Content -Path $path
foreach($content in $fileContent)
{
$match = [System.Text.RegularExpressions.Regex]::Match($content, $RegularExpression)
if($match.Success) {
$match.groups[1].value
}
}
}
将您的 greedy 捕获组 (.*)
更改为 non-greedy,(.*?)
,因此只有下一个 "
匹配。
- 替代方法是使用
([^"]*)
要验证字符串是否包含有效(2 到 4 个组件)版本号,只需将其转换为 [version]
(System.Version
)。
应用于您的函数,通过 :
优化捕获组提取
function Get-VersionFromSolutionInfoFile ($path="$pwd\SolutionInfo.cs") {
try {
[version] $ver =
(Get-Content -Raw $path) -replace '(?s).*\bAssemblyVersion\("(.*?)"\).*', ''
} catch {
throw
}
return $ver
}
我正在尝试创建一个脚本,用于从解决方案中找到并 return 程序集版本。它涵盖了一些测试场景,但我找不到正确的正则表达式来检查版本是否格式正确(1.0.0.0 没问题,但是 1.0.o.0)并且包含 4 位数字?这是我的代码。
function Get-Version-From-SolutionInfo-File($path="$pwd\SolutionInfo.cs"){
$RegularExpression = [regex] 'AssemblyVersion\(\"(.*)\"\)'
$fileContent = Get-Content -Path $path
foreach($content in $fileContent)
{
$match = [System.Text.RegularExpressions.Regex]::Match($content, $RegularExpression)
if($match.Success) {
$match.groups[1].value
}
}
}
将您的 greedy 捕获组
(.*)
更改为 non-greedy,(.*?)
,因此只有下一个"
匹配。- 替代方法是使用
([^"]*)
- 替代方法是使用
要验证字符串是否包含有效(2 到 4 个组件)版本号,只需将其转换为
[version]
(System.Version
)。
应用于您的函数,通过
function Get-VersionFromSolutionInfoFile ($path="$pwd\SolutionInfo.cs") {
try {
[version] $ver =
(Get-Content -Raw $path) -replace '(?s).*\bAssemblyVersion\("(.*?)"\).*', ''
} catch {
throw
}
return $ver
}