$() 从字符串中删除

$() is removed from string

我想用新验证替换旧验证。但是新的验证正则表达式正在从正则表达式中删除 $()

$oldValidation="<RegexPattern>^[\da-zA-Z\s+()\-']+$</RegexPattern>"
$newValidation= "<RegexPattern>^[\w\s,.;+&'""!?$()@%]*$</RegexPattern>"
$_.Fields["Parameters"].value -replace $oldValidation, $newValidation   

但是 newValidation 正在从正则表达式中删除 $() 并像这样显示它

<RegexPattern>^[\w\s,.;+&'"!?@%]*$</RegexPattern>

这可以帮助:

$oldValidation="<RegexPattern>^[\da-zA-Z\s+()\-']+$</RegexPattern>"
$newValidation= "<RegexPattern>^[\w\s,.;+&'""!?`$()@%]*$</RegexPattern>"
$_.Fields["Parameters"].value -replace [regex]::escape($oldValidation), $newValidation.Replace('$','$$')

请检查$前是否有反引号。

另一种可能的解决方案是在 $newValidation 中使用反引号后使用 .Replace:

$_.Fields["Parameters"].value.Replace($oldValidation, $newValidation)

根据 https://regex101.com$ 表示正则表达式中的行尾。 () 用于捕获组。您必须将它们反斜杠才能按字面意思使用它们。