2016-06-21 83 views
1

尝试过各种组合,但我无法替换下面的文字 - 我一直在收到错误。我有一种感觉,它不喜欢“\”甚至是我已经添加的“$”,但看不出什么是错的 - 任何帮助将不胜感激。我想要做的就是将一些文字替换为其他文字。替换文字失败

PS C:\> $f = "C:\LocalGAR\WIN\Comp\register\x86_v1.0" 

PS C:\> $f -replace ('C:\LocalGAR','\\comp.gci.tk.com\files$') 
The regular expression pattern C:\LocalGAR is not valid. 
At line:1 char:1 
+ $f -replace ('C:\LocalGAR','\\comp.gci.tk.com\files$') 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (C:\LocalGAR:String) [], RuntimeException 
    + FullyQualifiedErrorId : InvalidRegularExpression 

回答

2

完全不同的你要逃避斜线在你的搜索模式

手动逃脱

$f -replace ('C:\\LocalGAR','\\comp.gci.tk.com\files$') 

或更安全的自动转义字符串

$f -replace ([Regex]::Escape('C:\LocalGAR'),'\\comp.gci.tk.com\files$') 

RET瓮

\\comp.gci.tk.com\files$\WIN\Comp\register\x86_v1.0 
+0

辉煌 - 作品魅力。感谢那.. – lara400

2

你有没有打过电话“替代”作为一个方法,像这样:

$f.replace('C:\LocalGAR','\\comp.gci.tk.com\files$') 

这在您行则不会为我抛出一个错误。 编辑(从马蒂亚斯R.杰森): 是的,它也很好地注意"-replace"".replace"

+0

只是要清楚 - '.Replace()'和'-replace'是*不是相同 –

+0

谢谢你 - 我更喜欢这种方式。 – lara400

1

Powershell的-replace操作者使用模式匹配正则表达式,以及它们使用反斜杠\来识别正则表达式组 - 例如\s是“任何空格字符(空格,制表符)”。

它试图匹配\Lregular expression command,并且找不到它,并且抛出错误。

-replace的替换文本是一个普通的字符串,而不是正则表达式,所以$没有问题。

(这两个选项中,通过其他的答案给出,是使用$string.replace()方法,其确实文字串替换,或逃避在正则表达式中的特殊字符所以它们不是命令 - 无论是通过用手或用[regex]::escape()) 。

+0

感谢您的信息 - 非常有用的知道。 – lara400