匹配号码长度和前缀

时间:2019-06-11 17:02:41

标签: powershell

我在代码<add key="Port" value="51130" />中有一行,我想用传入的端口替换值。全部以“ 51”开头我希望能够用新的端口号替换必填的51 *。我想不通。

尝试了类似的东西

$content = " <add key="Port" value="51130" />

$port = "51128"

(Get-Content $content).Replace("51*","$($port)")

但是我知道那是文字,而不是通配符。

我也尝试过:

(Get-Content $content).Replace('51\d+',"$($port)")

但那里也没有运气。

1 个答案:

答案 0 :(得分:1)

要使用正则表达式替换运算符,如果$content包含目标字符串,则可以执行以下操作。

$content -Replace "51\d+",$port 

如果$content是路径,则可以运行Get-Content,然后应用-Replace

(Get-Content $content) -Replace "51\d+",$port

LotPings提供了在声明后使用正面外观的语法,对于不想替换以51开头的字符串/文件中的所有数字的情况,这是更安全的:

$content -Replace '(?<=add key="Port" value=")51\d+',$port

.Replace()的问题在于它不支持正则表达式。这是字符串类中的一种方法,用于替换文字字符串。

此外,这似乎是XML定义的一部分。创建XML对象并相应地更新属性可能会更好。