Powershell替换行为

时间:2018-01-22 08:33:32

标签: powershell

我执行了以下ps命令,它显示了一个奇怪的结果:

"version: 1.0.0.0, count: 1200000" -replace "1.0.0.0", "1.1.0.0"

结果是:

version: 1.1.0.0, count: 1.1.0.0

为什么字符串" 1200000"得到替换?

PS版:

Name                           Value
----                           -----
PSVersion                      5.1.16299.98
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.16299.98
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

1 个答案:

答案 0 :(得分:4)

你需要转义.字符,因为它表示正则表达式中的任何字符(换行符除外):

"version: 1.0.0.0, count: 1200000" -replace "1\.\0\.0\.0", "1.1.0.0"

由于'1.0.0.0'与正则表达式中的"1200000"完全匹配

  

该点匹配单个字符,而不关心该字符   是即可。换行符是唯一的例外。

请参阅:https://www.regular-expressions.info/dot.html

另一种选择是使用Regex.Escape方法

  

转义一组最小字符(\,*,+,?,|,{,[,(,),^,   $,。,#和white space)用它们的转义码替换它们。

例如:

$EscapeString = [regex]::Escape("1.0.0.0")
"version: 1.0.0.0, count: 1200000" -replace $EscapeString, "1.1.0.0"