Select-String失败,搜索词包含特殊字符

时间:2017-04-21 19:38:33

标签: powershell powershell-v3.0 select-string

当我跑步时:

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

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

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

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

1 个答案:

答案 0 :(得分:5)

如果您希望Select-String匹配文字 (文字子字符串匹配)而不是(默认情况下)正则表达式,< strong>使用-SimpleMatch

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

相比之下,如果您需要 合并一个文字加入正则表达式 ,请将[regex]::Escape()应用于{ {3}}建议 例如,仅在单词边界($SearchStr)找到\b

Select-String -Pattern ('\b' + [regex]::Escape($SearchStr) + '\b') -Path $env:SystemRoot\win.ini

可选背景信息

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

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

因此,\等Windows风格路径中的c:\programFiles\xyz会导致\字符的解释。作为转义序列的开始

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

要转义\ 本身,以便字面上将其加倍:{{1} }。

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

换句话说:在正则表达式中嵌入文字字符串,首先将其传递给\\