regex - PowerShell 5 和 7 之间的正则表达式区别
问题描述
我有一个在 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
返回“按预期”。PSversion7
什么都没有。
IPv6 列表包含“所有内容”。
这里的搭档是我将把它部署为 Azure 函数,因此我必须让它在PSversion7
.
编辑:
谢谢@DavidBrabant,您测试并暗示我它应该可以工作。打印 $iplist 变量是我的错误,我应该数一数
$iplist.count
然后我会看到它包含在一个项目中,但是在打印它们时它显示为预期结果(几个项目)。在正则表达式上运行它是没有意义的,只有一项是正则表达式的响应如此奇怪的原因。
$iplist = $ipres.Content.Split("`n")
为 PS7 制作了 trix 并在 PS5 上工作。
这就提出了一个问题,[Environment]::NewLine 是根本原因吗?
解决方案
发布这个,所以我可以关闭这个问题。
PS5 和 PS7 之间的区别在于 [Environment]::NewLine,而不是正则表达式在不同 PowerShell 版本上的行为。
$iplist = $ipres.Content.Split("`n")
解决了它并适用于 PS5 和 PS7
推荐阅读
- erpnext - 如何在 Frappe/ERP 中正确删除自定义文档类型
- magento2 - Magento 仪表板页眉和页脚
- python - 如何在 html 中使用 {% if user.is_authenticated %} 来显示或删除内容
- java - 为什么 ChronoUnit.HOURS.between() 不工作?
- javascript - 我可以在 Vscode 编辑器中使用 Live Server 吗?
- java - 如何在 Spring Boot 中测试分页结果?
- flutter - 对流有什么不好的用途?
- xcode - 为什么角色的脸在 Xcode 中会自动转换为绿色?
- javascript - 如何在 django 模板中设置默认值
- reactjs - 为什么两条路由在具有不同路径链接的反应js中调用同一页面