作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个基于XML的模板字符串,在其中必须替换自制的模板标记:
$template = '<Foo Name="${BAZ}">'
${BAZ}
替换为一个值。我认为使用区分大小写的
-creplace
运算符是个好主意。就像给定的一样,我既有没有附加修饰符的简单参数名称(
BAZ
)(
${
}
)及其值(42):
$param = 'BAZ'
$value = 42
-f
导出我的替换字符串,以将参数名称与其“标记”混合,同时小心地在格式字符串中转义文字
{
和
}
:
$needle = '${{{0}}}' -f $param
# ${BAZ}
# at least when printed...
$template -creplace $needle, $value
# <Foo Name="${BAZ}">
# so $needle does not seem to match the string '${BAZ}'
$template
是通过
$template = Get-Content "template-file.xml"
的大型多行字符串,我希望它不是根源。)
-creplace
来支持.net的
Replace()
方法,上述
$needle
与模板匹配:
$template.Replace($needle, $value)
# <Foo Name="42"/>
-creplace
不合作的原因,以及我可以做些什么。
最佳答案
-replace
是用于替换正则表达式的运算符。 -creplace
仅使此正则表达式区分大小写。您遇到的问题是正则表达式本身,因为某些字符在正则表达式中起特殊作用。
您想要做的是转义此类字符:
$template -replace [regex]::escape($needle), $value
\$\{BAZ}
关于regex - 如何在Powershell中为替换运算符转义美元和花括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53721407/
我是一名优秀的程序员,十分优秀!