当我跑步时:
$SearchStr = "c:\programFiles\xyz"
Select-String -pattern $SearchStr -path $env:SystemRoot\win.ini
我收到一条错误消息,指出字符串是"不是有效的正则表达式"
相比之下,当$SearchStr
不包含特殊字符时,它正常工作。
为什么它不适用于\
等特殊字符?
答案 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
方法可以为您执行此操作,同时转义对正则表达式引擎具有特殊含义的任何其他字符。
换句话说:在正则表达式中嵌入文字字符串,首先将其传递给\\
。