Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Regex split从IP地址中删除第一个八位组_Regex_Powershell - Fatal编程技术网

使用Regex split从IP地址中删除第一个八位组

使用Regex split从IP地址中删除第一个八位组,regex,powershell,Regex,Powershell,我试图从IP地址中删除第一个八位字节,包括前导的,我试图使用正则表达式,但我无法找到正确的使用方法。这是我的密码 '47.172.99.12' -split '\.(.*)',"" 我想要的结果是 172.99.12 如果只需要最后3个数字,可以使用以下正则表达式: (\.\d+){3}$ 但如果你想在第一个圆点后看到所有东西,你可以用积极的眼光看后面: (?<=\.).* (?如果只需要最后3个数字,可以使用以下正则表达式: (\.\d+){3}$ 但如果你想在第一个圆点后

我试图从IP地址中删除第一个八位字节,包括前导的
,我试图使用正则表达式,但我无法找到正确的使用方法。这是我的密码

'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
方法效率低(尽管在这种简单的情况下效率不高)。我不喜欢使用正则表达式解决方案,除非我需要匹配变量模式。但是对于静态文本,我更喜欢内置的字符串方法。