我正在尝试使用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中是某种特殊符号?因为我能够很容易地用\
代替/
来做同样的事情。
有什么建议吗?
答案 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;