我正在使用 PowerShell 编写一个错误检查脚本来查看 Bitvise SFTP 日志并在有任何错误时发出警报。但是,我不希望它在字符串“错误:打开本地文件”时提醒我,因为这只是说明该文件已经存在于目标中,这是预期的。我对正则表达式不是很好,除了我们可以忽略的错误之外,我似乎找不到正确的元素组合来查找错误。
例子:
ERROR: Writing local file (I want to be alerted to this)
ERROR: Opening local file (I don't want to be alerted to this)
正如@spikey_richie 所说,您需要负前瞻:
基本上,不是指定您要查找的内容,而是指定您不想要的内容,然后将其包装在
(?!
and)
中。演示
这似乎可以满足您的要求 - 它使用 PoSh 可以将正则表达式匹配应用于整个集合的方式。[咧嘴笑]
它能做什么 ...
在准备好实际执行此操作时创建示例数据集,用调用替换整个
#region/#endregion
块。Get-Content
$Result
集合编码 ...
输出 ...
类似的东西也应该起作用:Demo
这种情况类似于The Greatest Regex Trick Ever中介绍的情况--- 对于任何学习 regex 的人来说都是一本好书。虽然Glorfindel发布的负前瞻在这种情况下效果很好,但这种技术很容易扩展到多个排除、后瞻结合前瞻等,并且仍然保持可读性。该技巧的本质是捕获整个匹配中的所有排除项和第 1 组中的所需内容。对于 OP,正则表达式如下所示:
示例:(
在工作代码中,
<Here-string> -Split "`n"
将替换为
Get-Contnet 'c:\Path\To\Error.log'
:)屏幕截图:
同样,这种技术的美妙之处在于它易于扩展:
'Exception1|Exception2|Exception3|(Desired Match)'