我执行了以下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
答案 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"