我有很多看起来像的数组
$a = 'Handshake', 'Success', 'Status', 200, '192.30.253.113', 'OK', 0xF
此数组中包含的信息可能不同,但其中始终包含 IP 地址(一个或多个,最多三个)。我正在寻找一种从数组中提取这些地址的方法。最简单的方法是什么?请注意,IP 地址在数组中的位置是不同的。
我有很多看起来像的数组
$a = 'Handshake', 'Success', 'Status', 200, '192.30.253.113', 'OK', 0xF
此数组中包含的信息可能不同,但其中始终包含 IP 地址(一个或多个,最多三个)。我正在寻找一种从数组中提取这些地址的方法。最简单的方法是什么?请注意,IP 地址在数组中的位置是不同的。
$a.Where{!($_ -as [Double]) -and $_ -as [IPAddress]}
或者,如果您想确保 IP 地址有效,请使用 @JulienNury 显示的正则表达式
正则表达式可能是最快的方法:
$a -match '\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4}\b'
假设您有多个数组,例如$a
,$b
等$c
。您可以使用正则表达式 -
$arr = @()
$pattern = "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"
$a, $b, $c | Foreach {if ([Regex]::IsMatch($_, $pattern)) {
$arr += [Regex]::Match($_, $pattern)
}
}
$arr | Foreach {$_.Value.Trim()}
现在您$arr
将拥有来自所有多个阵列的所有 IP 地址。