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