使用Regex split从IP地址中删除第一个八位组
我试图从IP地址中删除第一个八位字节,包括前导的使用Regex split从IP地址中删除第一个八位组,regex,powershell,Regex,Powershell,我试图从IP地址中删除第一个八位字节,包括前导的,我试图使用正则表达式,但我无法找到正确的使用方法。这是我的密码 '47.172.99.12' -split '\.(.*)',"" 我想要的结果是 172.99.12 如果只需要最后3个数字,可以使用以下正则表达式: (\.\d+){3}$ 但如果你想在第一个圆点后看到所有东西,你可以用积极的眼光看后面: (?<=\.).* (?如果只需要最后3个数字,可以使用以下正则表达式: (\.\d+){3}$ 但如果你想在第一个圆点后
,我试图使用正则表达式,但我无法找到正确的使用方法。这是我的密码
'47.172.99.12' -split '\.(.*)',""
我想要的结果是
172.99.12
如果只需要最后3个数字,可以使用以下正则表达式:
(\.\d+){3}$
但如果你想在第一个圆点后看到所有东西,你可以用积极的眼光看后面:
(?<=\.).*
(?如果只需要最后3个数字,可以使用以下正则表达式:
(\.\d+){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>
也就是说,使用正则表达式执行此任务有点过分。您只需使用以下方法:
PS>'47.172.99.12'。拆分('2)[1]
172.99.12
PS>
在正则表达式模式中,
字符具有特殊含义:它匹配除换行符以外的任何字符。您需要将其转义以匹配文字句点:
'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>
也就是说,使用正则表达式执行此任务有点过分。您只需使用以下方法:
PS>'47.172.99.12'。拆分('2)[1]
172.99.12
PS>
您可以使用-replace
操作符而不是split
:
'47.172.99.12'-替换“^\d+\”
您可以使用-replace
操作符而不是split
:
'47.172.99.12'-替换“^\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个部分。考虑到上下文,我很惊讶没有人为此提到[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个部分。使用-split
操作符也可以限制结果元素的数量。您可以执行$head,$tail='47.172.99.12'-split',2
(或者,$null,$tail=…
如果你对第一个八位字节不感兴趣)。@AnsgarWiechers-对。但我的意思是,正则表达式本质上比Split
方法效率低(尽管在这种简单的情况下效率不高)。除非需要匹配变量模式,否则我不喜欢使用正则表达式解决方案。不过,对于静态文本,我更喜欢内置的字符串方法。-split
运算符也允许限制结果元素的数量。您可以执行$head,$tail='47.172.99.12'-split'\',2
(或者,$null,$tail=…
如果你对第一个八位字节不感兴趣)。@AnsgarWiechers-对。但我的意思是,正则表达式本质上比Split
方法效率低(尽管在这种简单的情况下效率不高)。我不喜欢使用正则表达式解决方案,除非我需要匹配变量模式。但是对于静态文本,我更喜欢内置的字符串方法。