微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于获取程序集版本号的 powershell 中的正则表达式

如何解决用于获取程序集版本号的 powershell 中的正则表达式

我正在尝试创建一个脚本,该脚本将从解决方案中查找并返回程序集版本。它涵盖了一些测试场景,但我找不到正确的正则表达式来检查版本是否正确(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
    }
}

}

解决方法

  • 将您的贪婪捕获组(.*)更改为非贪婪捕获组(.*?),这样只有非常下一个 " 匹配。

    • 另一种方法是使用 ([^"]*)
  • 要验证字符串是否包含有效的(2 到 4 个组件)版本号,只需将其强制转换为 [version] (System.Version)。

应用于您的函数,通过 -replace operator 优化提取捕获组:

function Get-VersionFromSolutionInfoFile ($path="$pwd\SolutionInfo.cs") {
  try {
    [version] $ver = 
      (Get-Content -Raw $path) -replace '(?s).*\bAssemblyVersion\("(.*?)"\).*','$1'
  } catch {
    throw
  }
  return $ver
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。