All*_*one -1 powershell powershell-3.0 select-string
当我跑:
$SearchStr = "c:\programFiles\xyz"
Select-String -pattern $SearchStr -path $env:SystemRoot\win.ini
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息,指出该字符串"不是有效的正则表达式"
相比之下,它$SearchStr不包含特殊字符时工作正常.
为什么它不适用于特殊字符,如\?
如果要Select-String匹配文字(文字子字符串匹配)而不是(默认情况下)正则表达式,请使用-SimpleMatch:
Select-String -SimpleMatch -Pattern $SearchStr -Path $env:SystemRoot\win.ini
Run Code Online (Sandbox Code Playgroud)
相反,如果你需要到合并文字为正则表达式,适用[regex]::Escape()于它,因为TessellatingHeckler建议.
例如,仅查找$SearchStr单词边界(\b):
Select-String -Pattern ('\b' + [regex]::Escape($SearchStr) + '\b') -Path $env:SystemRoot\win.ini
Run Code Online (Sandbox Code Playgroud)
默认情况下,Select-String将传递给参数的搜索项解释-Pattern为正则表达式(正则表达式).
在正则表达式中,\具有特殊含义:它用作转义字符 r来修改正则表达式引擎否则将解释以下字符的方式.
因此,\在Windows风格的路径c:\programFiles\xyz中会产生对\字符的解释.作为逃脱序列的开始.
使用示例路径: \p,如果后跟Unicode字符类别{L},则匹配该类别中的任何字符; \x,如果后跟2个十六进制数字,则匹配具有该代码点的单个字符.
为了逃避\ 自己,以便按字面意思对待它,加倍:\\.
.NET框架[regex]::Escape()方法可以为您执行此操作,同时转义对正则表达式引擎具有特殊含义的任何其他字符.
换句话说:在正则表达式中嵌入文字字符串,将其传递给[regex]::Escape()第一个.
| 归档时间: |
|
| 查看次数: |
3103 次 |
| 最近记录: |