搜索词包含特殊字符,选择弦失败



我运行时:

$SearchStr = "c:programFilesxyz"
Select-String -pattern $SearchStr -path $env:SystemRootwin.ini

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

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

为什么它不适用于诸如

之类的特殊字符

如果要 Select-String匹配 literals (字面的子字符串匹配(,而不是(默认情况下(正则表达式使用-SimpleMatch

Select-String -SimpleMatch -Pattern $SearchStr -Path $env:SystemRootwin.ini

相比之下,如果您需要 a字面纳入正则表达式,请将[regex]::Escape()应用于它,如TessellingHeckler所建议的。
例如,仅在Word Bornaries(b(上找到$SearchStr

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

可选的背景信息

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

在正则表达式中, 具有特殊的含义:它用作 easce characte r修改常规表达引擎如何否则解释以下字符(s((。

因此,诸如c:programFilesxyz之类的Windows式路径中的导致字符的解释。作为逃脱序列的开始

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

逃脱 本身,以便对其进行处理字面上的 double it it it \ P>

.NET Framework [regex]::Escape()方法可以为您做到这一点,并逃脱对Regex引擎具有特殊意义的其他字符。

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

相关内容

  • 没有找到相关文章

最新更新