gpt4 book ai didi

regex - PowerShell RegEx 拆分 MAC 地址

转载 作者:行者123 更新时间:2023-12-03 20:42:10 30 4
gpt4 key购买 nike

我需要使用 RegEx 验证 RAW 格式的 MAC 地址,并将其拆分为 6 个值的数组,由 2 个字符组成。
当我使用以下模式时,我只获得捕获组最后一次迭代的内容:

PS C:\Windows\System32> "708BCDBC8A0D" -match "^([0-9a-z]{2}){6}$"
True
PS C:\Windows\System32> $Matches

Name Value
---- -----
1 0D
0 708BCDBC8A0D


PS C:\Windows\System32>
我可以用什么模式捕获所有组?
我需要这个结果:
0 = 708BCDBC8A0D
1 = 70
2 = 8B
3 = CD
4 = BC
5 = 8A
6 = 0D

最佳答案

您不能使用单个组定义捕获多个组。
避免在不必要时使用 RegEx,因为它会占用大量 CPU。值(value)数百万记录。
对于 MAC,您可以使用特殊的 PhysicalAddress类(class):

[System.Net.NetworkInformation.PhysicalAddress]::Parse('708BCDBC8A0D') 
对于 .Net 5(Powershell Core 我认为 基于它)有 TryParse添加了方法,但在 .Net 4.5 中没有 TryParse方法。
要检查 .Net 框架 powershell 正在运行,请使用 [System.Reflection.Assembly]::GetExecutingAssembly().ImageRuntimeVersion
'708BCDBC8A0D' -match "^$('([A-F0-9]{2})' * 6)$"; $Matches
'708BCDBC8A0D' -match '^([A-F0-9]{2})([A-F0-9]{2})([A-F0-9]{2})([A-F0-9]{2})([A-F0-9]{2})([A-F0-9]{2})$'; $Matches
'@(0..5) | ForEach-Object {'708BCDBC8A0D'.Substring($_ * 2, 2)}'
@(
[String]::new('708BCDBC8A0D'[0..1]),
[String]::new('708BCDBC8A0D'[2..3]),
[String]::new('708BCDBC8A0D'[4..5]),
[String]::new('708BCDBC8A0D'[6..7]),
[String]::new('708BCDBC8A0D'[8..9]),
[String]::new('708BCDBC8A0D'[10..11])
)

关于regex - PowerShell RegEx 拆分 MAC 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66742113/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com