regex - PowerShell 脚本 - 无法将值转换为正则表达式
问题描述
编写了一个脚本,用于通过正则表达式将文件从一个文件夹复制到另一个文件夹:
param ([string]$dir)
$destination = "Q:\OneDrive\nuget-packages"
$filter = [regex] "*.nupkg"
$bin = Get-ChildItem -Path $dir | Where-Object {$_.Name -match $filter}
foreach ($item in $bin) {Copy-Item -Path $item.FullName -Destination $destination}
运行脚本时,PowerShell 表示它无法将值“ .nupkg”转换为类型为“System.Text.RegularExpressions.Regex”。错误:“解析” .nupkg“ - 量词 {x,y} 什么都没有。”
我的正则表达式有什么问题?
解决方案
*
不是正则表达式中的通配符,它是一个量词,它定义了前一个标记应该出现多少次。
在你的 之前没有标记*
,这是 PowerShell 抱怨的(尽管它谈到了{x,y}
,这是另一个更通用的量词;我猜它在引发错误之前会转化*
为等价物)。{0,}
\.nupkg$
可能会做你想做的事,匹配任何以.nupkg
.
在这个正则表达式中,我不费心匹配完整的字符串,但是我使用$
它表示字符串的结尾。我还转义了.
以防止它被理解为它在正则表达式中表示的元字符。
如果您想避免.nupkg
单独匹配,则必须匹配更多的字符串,您可以使用.\.nupkg$
,其中.
是正则表达式通配符,它将确保在扩展之前至少有一个字符要匹配。
推荐阅读
- php - 警告:mysql_fetch_array() 期望参数 1 是资源... - 为什么?
- c - 不使用 strlen() 函数计算字符串的长度
- c++ - 在取消引用向量时遇到问题
- indexing - 当一行被删除时,它不是物理删除,而是标记为已删除。太极数据
- vue.js - 在 Vue.js 中从 index.html 调用组件
- angular - Firebase 电子邮件验证电子邮件问题
- javascript - 传递带参数的函数时未触发单击事件
- javascript - TypeError: undefined is not an object , item is from an array from an API
- mysql - 如何使用mysql在距离搜索中将表与内连接联合起来
- apache-nifi - 如何使用来自 InvokeHTTP 的 JSON 响应为另一个 InvokeHTTP 创建标头?