麻烦使用替换来逃避反斜杠

时间:2016-01-05 00:24:10

标签: regex powershell

我希望使用PowerShell replace函数替换部分网络路径。我遇到了如何处理反斜杠(\

的麻烦
"\\Share\Users\Location\Username" -ireplace  "\\Share\Users","\\NewShare\AllUsers"

上面的代码会产生错误,所以我看了使用[Regex] :: Escape转义但它不会替换文本:

[Regex]::Escape( "\\Share\Users\Location\Username") -ireplace  [Regex]::Escape("\\Share\Users"),[Regex]::Escape("\\NewShare\AllUsers")

这就是我得到的:

\\\\Share\\Users\\Location\\Username

我所需要的只是:

\\Share\Users替换为\\NewShare\AllUsers以生成\\NewShare\AllUsers\Location\Username

我的知识目前仅限于正则表达式,所以我想知道是否有人可以帮助我:)

2 个答案:

答案 0 :(得分:4)

\是正则表达式中的特殊字符,\U中的\Users会导致它查找不存在的特殊命令U。你需要逃避反斜杠:

"\\Share\Users\Location\Username" -ireplace  "\\\\Share\\Users", "\\NewShare\AllUsers"

基本上[RegEx]::Escape()是正确的方法,但关键是只将它用于实际正则表达式的参数(第二个)。

答案 1 :(得分:1)

您应该可以使用ireplace,只需调整您的第一个参数:

"\\Share\Users\Location\Username" -ireplace  "\\\\Share\\Users","\\NewShare\AllUsers"

注意我必须转义反斜杠,因为它被视为正则表达式,而第一个和第三个参数被视为字符串。