[英]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 >
您可以使用-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.