使用Regex拆分从IP地址中删除第一个八位字节

时间:2015-05-05 18:56:42

标签: regex powershell

我正在尝试从IP地址中删除包含前导.的第一个八位字节,我正在尝试使用正则表达式,但我无法弄清楚使用它的正确方法。这是我的代码

'47.172.99.12' -split '\.(.*)',""

我想要的结果是

172.99.12

4 个答案:

答案 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)

如果您只想要最后3个数字,可以使用以下正则表达式:

(\.\d+){3}$

Demo

但如果你想要在第一个点之后的所有东西,你可以使用积极的后视:

(?<=\.).*

Demo

答案 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个部分。