繁体   English   中英

使用正则表达式拆分从IP地址中删除第一个八位位组

[英]Remove first octet from IP address with Regex split

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

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

我想要的结果是

172.99.12

. 字符在Regex模式中有特殊含义:它匹配除换行符以外的任何字符。 您需要对它进行转义以匹配一个字面量:

'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 >

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

(\.\d+){3}$

演示版

但是,如果您想要第一个点之后的所有内容,则可以使用正向后看:

(?<=\.).*

演示版

您可以使用-replace运算符而不是split

'47.172.99.12' -replace '^\d+\.',""

考虑到上下文,我很惊讶没有人提到[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个部分重新加入一个句点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM