PowerShell 5 和 7 之间的正则表达式差异
Regular expression difference between PowerShell 5 and 7
我有一个正则表达式 returns 在 PS5 和 PS7 上不同。
运行 此代码:
$ipres = Invoke-WebRequest -Method GET -Uri 'https://raw.githubusercontent.com/SecOps-Institute/Tor-IP-Addresses/master/tor-exit-nodes.lst'
$iplist = $ipres.Content.Split([Environment]::NewLine)
$iplist_v4 = $iplist | Where-Object { $_ -match '^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$' }
$iplist_v6 = $iplist | Where-Object { $_ -notmatch '^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$' }
给出不同的结果:
PSVersion 5.1.22494.1000
PSVersion 7.2.0
正是正则表达式让一切变得不同。
PSversion5
returns “符合预期”。 PSversion7
returns 没什么.
IPv6 列表包含“一切”。
这里的伙伴是我将把它部署为一个 Azure 函数,因此我必须让它在 PSversion7
上运行。
编辑:
感谢@DavidBrabant,您测试并暗示我它应该可以工作。打印 $iplist 变量是我的错误,我应该计算
$iplist.count
然后我会看到它包含在一个项目中,但是当打印它们时它显示为预期结果(几个项目)。 运行 它在正则表达式上毫无意义,只有一项是正则表达式的响应如此奇怪的原因。
$iplist = $ipres.Content.Split("`n")
为 PS7 完成了三重奏并在 PS5 上工作。
这就提出了一个问题,[Environment]::NewLine 是根本原因吗?
发布这个,这样我就可以关闭这个问题了。
PS5 和 PS7 之间的差异是 [Environment]::NewLine,而不是正则表达式在不同 PowerShell 版本上的行为。
$iplist = $ipres.Content.Split("`n")
已解决并适用于 PS5 和 PS7
我有一个正则表达式 returns 在 PS5 和 PS7 上不同。 运行 此代码:
$ipres = Invoke-WebRequest -Method GET -Uri 'https://raw.githubusercontent.com/SecOps-Institute/Tor-IP-Addresses/master/tor-exit-nodes.lst'
$iplist = $ipres.Content.Split([Environment]::NewLine)
$iplist_v4 = $iplist | Where-Object { $_ -match '^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$' }
$iplist_v6 = $iplist | Where-Object { $_ -notmatch '^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$' }
给出不同的结果:
PSVersion 5.1.22494.1000
PSVersion 7.2.0
正是正则表达式让一切变得不同。
PSversion5
returns “符合预期”。 PSversion7
returns 没什么.
IPv6 列表包含“一切”。
这里的伙伴是我将把它部署为一个 Azure 函数,因此我必须让它在 PSversion7
上运行。
编辑:
感谢@DavidBrabant,您测试并暗示我它应该可以工作。打印 $iplist 变量是我的错误,我应该计算
$iplist.count
然后我会看到它包含在一个项目中,但是当打印它们时它显示为预期结果(几个项目)。 运行 它在正则表达式上毫无意义,只有一项是正则表达式的响应如此奇怪的原因。
$iplist = $ipres.Content.Split("`n")
为 PS7 完成了三重奏并在 PS5 上工作。
这就提出了一个问题,[Environment]::NewLine 是根本原因吗?
发布这个,这样我就可以关闭这个问题了。
PS5 和 PS7 之间的差异是 [Environment]::NewLine,而不是正则表达式在不同 PowerShell 版本上的行为。
$iplist = $ipres.Content.Split("`n")
已解决并适用于 PS5 和 PS7