我正在尝试从IP地址中删除包含前导.
的第一个八位字节,我正在尝试使用正则表达式,但我无法弄清楚使用它的正确方法。这是我的代码
'47.172.99.12' -split '\.(.*)',""
我想要的结果是
172.99.12
答案 0 :(得分:3)
.
字符在正则表达式模式中具有特殊含义:它匹配除换行符之外的任何字符。您需要将其转义以匹配文字句点:
'47.172.99.12' -split '\.(.*)',""
^
但请注意,这将返回比您需要的更多结果:
PS > '47.172.99.12' -split '\.(.*)',""
47
172.99.12
PS >
要获得所需内容,您可以在1
PS > ('47.172.99.12' -split '\.(.*)',"")[1]
172.99.12
PS >
也就是说,使用Regex执行此任务有点过分。您只需使用String.Split
方法:
PS > '47.172.99.12'.Split('.', 2)[1]
172.99.12
PS >
答案 1 :(得分:2)
答案 2 :(得分:2)
您可以使用-replace
运算符代替split
:
'47.172.99.12' -replace '^\d+\.',""
答案 3 :(得分:2)
鉴于上下文,我很惊讶没有人提到[ipaddress]
类。使用此方法还可确保字符串是有效的IP地址。
$ipAddress = "192.168.0.1" -as [ipaddress]
If($ipAddress){
($ipAddress.GetAddressBytes())[1..3] -join "."
} Else {
Write-Host "Invalid Address"
}
-as
会尝试将字符串转换为[ipaddress]
。如果成功执行了强制转换,则返回$null
。然后我们使用.GetAddressBytes()
将IP地址分成4个部分。既然我们知道这是一个有效的IP,那么我们可以安全地重新加入最后3个部分。