gpt4 book ai didi

powershell - Select-String 因搜索词包含特殊字符而失败

转载 作者:行者123 更新时间:2023-12-03 00:25:34 24 4
gpt4 key购买 nike

当我运行时:

$SearchStr = "c:\programFiles\xyz"
Select-String -pattern $SearchStr -path $env:SystemRoot\win.ini

我收到一条错误消息,指出字符串“不是有效的正则表达式”

相比之下, $SearchStr 时工作正常。不包含特殊字符。

为什么它不适用于 \ 等特殊字符? ?

最佳答案

如果你想要Select-String匹配文字 (文字子串匹配)而不是(默认)正则表达式,使用 -SimpleMatch :

Select-String -SimpleMatch -Pattern $SearchStr -Path $env:SystemRoot\win.ini

相比之下,如果您需要 将文字合并到正则表达式中 , 申请 [regex]::Escape()给它,如 TessellatingHeckler 建议。
例如,只找到 $SearchStr在单词边界( \b):
Select-String -Pattern ('\b' + [regex]::Escape($SearchStr) + '\b') -Path $env:SystemRoot\win.ini

可选的背景信息

默认情况下, Select-String 解释传递给参数 -Pattern 的搜索词作为正则表达式(正则表达式)。

在正则表达式中,\有特殊含义:用作转义字符 r 修改正则表达式引擎如何解释以下字符。

因此, \在 Windows 样式的路径中,例如 c:\programFiles\xyz结果 \ 的解释字符。作为转义序列的开始 .

使用示例路径: \p , 如果后跟一个 Unicode 字符类别,例如 {L} , 匹配该类别中的任何字符; \x ,如果后跟 2 个十六进制数字,则匹配具有该代码点的单个字符。

逃离\本身,以便按字面意思处理,将其加倍:\\ .

.NET 框架 [regex]::Escape() 方法可以为您执行此操作,同时转义对正则表达式引擎具有特殊含义的任何其他字符。

换句话说: 要在正则表达式中嵌入文字字符串,请将其传递给 [regex]::Escape()第一的。

关于powershell - Select-String 因搜索词包含特殊字符而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43550719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com