我们可以提到变量in - replace函数的例子:
$value="V2" $prop="Groovy=V3" $prop -replace "(?<conf>Groovy)=(?<version>[vV]\d)" , "${conf}=${value}"
x0fgdtte1#
${conf} * 是 * 在正则表达式替换字符串中引用捕获的正确语法,但它 * 也 * 是一个有效的PowerShell变量表达式-因此您需要将替换字符串两边的双引号替换为单引号,以防止PowerShell在字符串传递给-replace运算符之前尝试展开变量:
${conf}
-replace
$value="V2" $prop="Groovy=V3" $prop -replace "(?<conf>Groovy)=(?<version>[vV]\d)" , ('${conf}=' + ${value})
另一种选择是使用反勾号对$进行转义:
$
$prop -replace "(?<conf>Groovy)=(?<version>[vV]\d)" ,"`${conf}=${value}"
6qftjkof2#
powershell7版本,带有scriptblock第二个参数。这可能并不容易,但不需要对命名为“conf”的捕获组进行特殊转义。
$value = 'V2' 'Groovy=V3' -replace '(?<conf>Groovy)=[vV]\d', { $_.groups['conf'].value + '=' + $value } Groovy=V2
或者简单地说,第一个捕获组:
$value = 'V2' 'Groovy=V3' -replace '(Groovy)=[vV]\d', { $_.groups[1].value + '=' + $value } Groovy=V2
2条答案
按热度按时间x0fgdtte1#
${conf}
* 是 * 在正则表达式替换字符串中引用捕获的正确语法,但它 * 也 * 是一个有效的PowerShell变量表达式-因此您需要将替换字符串两边的双引号替换为单引号,以防止PowerShell在字符串传递给-replace
运算符之前尝试展开变量:另一种选择是使用反勾号对
$
进行转义:6qftjkof2#
powershell7版本,带有scriptblock第二个参数。这可能并不容易,但不需要对命名为“conf”的捕获组进行特殊转义。
或者简单地说,第一个捕获组: