匹配各种模式的正则表达式

Regex to match various patterns

我正在尝试创建一个正则表达式来捕获许多可能的字符串,然后将其分配给一个新名称,正则表达式充当过滤器。

我的代码有三个磁盘选项,例如vm01-disk2 or vm01-disk-2 or vm01-disk_2

我创建了一个 If 循环,如下所示

$newname = vm02
        elseif ($vhdrename -match 'disk[-_]?2' -or $vhdrename -match 'disk[-_]?-2' -or $vhdrename -match 'disk[-_]?_2') {
        $vhdname = "$newname-datadisk02"
        }
        elseif ($vhdrename -match 'disk[-_]?3' -or $vhdrename -match 'disk[-_]?-3' -or $vhdrename -match 'disk[-_]?_3') {
        $vhdname = "$newname-datadisk03"
        }

但是,它仅在磁盘名称为 vm01-disk2 且缺少 disk_2 和 disk-2 时有效。

我需要循环访问每个 VM 周围的磁盘和大约 100 个磁盘,因此需要一个自动化解决方案:(

我试过了

    elseif ($vhdrename -match 'disk[-_]_?4') {
    $vhdname = "$newname-datadisk04"
    Write-Host "VM name is"$vhdname -ForegroundColor Yellow
    }
    elseif ($vhdrename -match 'disk[-_]-4') {
    $vhdname = "$newname-datadisk04"
    Write-Host "VM name is"$vhdname -ForegroundColor red
    }

也转义字符如'disk[-_]\-4'

任何人都可以看到我哪里出错了吗,我确信有一种更简洁、更聪明的方法可以做到这一点,我只是没有看到:)

提前致谢

您可以使字符 class 可选,例如使用捕获组来决定 ForegroundColor 并将数字与 datadisk

连接起来
\bdisk([-_]?)([0-9]+)
  • \bdisk 匹配 disk
  • ([-_]?) 可选择在组 1
  • 中捕获 -_
  • ([0-9]+) 捕获第 2 组,匹配 1+ 个数字

Regex demo