2016-06-21 2 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$') 

Это не выдаст ошибку для меня, где ваша линия делает. EDIT (от Матиаса Р. Джессена): Да, это также хорошо отметить, что "-replace" полностью отличается от ".replace"

+0

Просто, чтобы быть ясным - '.Replace()' и '-replace' is * not * то же самое –

+0

спасибо за это - мне нравится этот способ на самом деле. – lara400

1

-replace оператор PowerShell использует регулярные выражения для сопоставления с образцом, и они используют обратную косую черту \ для идентификации регулярных выражений группы - например, \s - «любой символ пробела (пробелы, вкладки)».

Он пытается сопоставить \L с номером regular expression command и не может найти его и высылает ошибку.

Текст замены для -replace является обычной строкой, а не регулярным выражением, поэтому $ в порядке.

(два варианта, как указано на другие ответы, должны использовать $string.replace() метод, который делает буквальную замену строки, или бежать специальные символы в регулярном выражении, поэтому они не являются командами - либо вручную, либо с [regex]::escape()) ,

+0

спасибо за информацию - очень полезно знать. – lara400

Смежные вопросы