如何在PowerShell中使用反斜杠字符作为文字?

时间:2016-09-08 16:55:53

标签: powershell replace

我正在尝试使用replace命令和字符\作为标识符来修剪字符串。

见下面的例子:

$string = "Hello\Hi"
$newstring = $string -replace ".*\"
$newstring

根据我的推理,这应该在CMD窗口中打印Hi

然而,我收到以下内容:

Invalid regular expression pattern: .*\.
At line:1 char:30
+ $newstring = $string -replace <<<<  ".*\"
    + CategoryInfo          : InvalidOperation: (.*\:String) [], RuntimeException
    + FullyQualifiedErrorId : InvalidRegularExpression

我假设这是因为\字符在powershell中是某种特殊符号?因为我能够很容易地用\代替/来做同样的事情。

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

反斜杠是正则表达式中的转义字符。它允许您使用特殊字符作为文字。

要使用反斜杠作为文字,您需要使用反斜杠转义它。例如:

"Hello\Hi" -replace ".*\\"

答案 1 :(得分:0)

  

在一些PowerShell表达式(匹配操作)中使用反斜杠   字符将被解释为正则表达式的开头,   (例如\ w =匹配字)这是行业标准的正则表达式语法。至   逃避这一点并将反斜杠视为一个普通的角色,加倍   它(替换\与\\)

此外:

  

PowerShell转义字符是重音符号(`)

这里有更多有用的提示: http://ss64.com/ps/syntax-esc.html

回答你的问题&#34;嗨&#34;在你的字符串之外,你可以做这样的事情:

($string.substring($string.indexof("\"),($string.length) - ($string.indexof("\")))) -replace "\\",""

我可能会让它变得比它需要的更复杂,但是这样做可以得到&#34; hi&#34;出于&#34; hello \ hi&#34;。

答案 2 :(得分:0)

尝试这样的事情:

$ string -replace [Regex] :: Escape(&#39; Direct = TCP:123.123.123.123 \ private $ \ myqueue&#39;),&#34; Direct = TCP:231.231.231.231 \ private $ \ myQueue中&#34;