Zak*_*iti 7 windows powershell
我正在编写一个PowerShell程序来替换字符串
-replace "$in", "$out"
Run Code Online (Sandbox Code Playgroud)
它对包含反斜杠的字符串不起作用,我该如何逃避呢?
bri*_*ist 10
该-replace运营商使用正则表达式,它把反斜线作为一个特殊字符.您可以使用双反斜杠来获得文字单反斜杠.
在您的情况下,由于您使用的是变量,我认为您在设计时不会知道内容.在这种情况下,您应该运行它[RegEx]::Escape():
-replace [RegEx]::Escape($in), "$out"
Run Code Online (Sandbox Code Playgroud)
该方法逃脱是特殊与无论是让他们字面匹配(其它特殊字符,包括需要正则表达式的任何字符.,$,^,(),[],等等.
您需要使用另一个反斜杠转义模式中的反斜杠或使用.Replace()方法而不是-replace运算符(但建议它们执行不同):
PS C:\> 'asdf' -replace 'as', 'b'
bdf
PS C:\> 'a\sdf' -replace 'a\s', 'b'
a\sdf
PS C:\> 'a\sdf' -replace 'a\\s', 'b'
bdf
PS C:\> 'a\sdf' -replace ('a\s' -replace '\\','\\'), 'b'
bdf
Run Code Online (Sandbox Code Playgroud)
请注意,只需要转义搜索模式字符串.代码-replace '\\','\\'说,"将转义后的模式字符串替换'\\'为单个反斜杠,使用未转义的文字字符串'\\',即两个反斜杠."
所以,你应该可以使用:
-replace ("$in" -replace '\\','\\'), "$out"
Run Code Online (Sandbox Code Playgroud)
[注意:briantist的解决方案更好.]
但是,如果您的模式具有连续的反斜杠,则需要对其进行测试.
或者,您可以使用.Replace()字符串方法,但正如我上面所说,它可能不完全匹配-replace运算符的行为:
PS C:\> 'a\sdf'.replace('a\\s', 'b')
a\sdf
PS C:\> 'a\sdf'.replace( 'a\s', 'b')
bdf
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20961 次 |
| 最近记录: |