【问题标题】:PowerShell: -replace, regex and ($) dollar sign woesPowerShell:-replace、正则表达式和 ($) 美元符号问题
【发布时间】:2012-03-13 04:32:24
【问题描述】:

我正在将数千行批处理代码转换为 PowerShell。我正在使用正则表达式来帮助完成这个过程。问题是部分代码是:

$`$2

替换时它只显示$2 并且不会扩展变量。我还在 replace 的第二部分使用了单引号,而不是转义变量,结果相同。

$origString = @'
IF /I "%OPERATINGSYSTEM:~0,6%"=="WIN864" SET CACHE_OS=WIN864
...many more lines of batch code
'@

$replacedString = $origString -replace "(IF /I `"%)(.+)(:.+%`"==`")(.+`")(.+)","if ( $`$2 -match `"^`$4 ) {`$5 }"

$replacedString

【问题讨论】:

  • 为了完整起见,每当您发布字符串操作问题时,如果您可以在操作之前给出一个文本示例(您拥有)什么,这将对每个人都有帮助字符串应该看起来像操作后的样子。
  • 好主意。下次会做。谢谢。

标签: regex powershell replace dollar-sign


【解决方案1】:

试试这样:

 $replacedString = $origString -replace "(IF /I `"%)(.+)(:.+%`"==`")(.+`")(.+)","if ( $`$`$2 -match `"^`$4 ) {`$5 }"

【讨论】:

    【解决方案2】:

    你可以试试这样的:

    $origString -replace "(IF /I `"%)(.+)(:.+%`"==`")(.+`")(.+)",'if ($$$2 -match "^$4" ) {$5 }'
    

    注意$$$2。这将评估为 $$2 的内容。


    一些代码向您展示差异。自己试试吧:

    'abc' -replace 'a(\w)', '$1'
    'abc' -replace 'a(\w)', "$1"  # "$1" is expanded before replace to ''
    'abc' -replace 'a(\w)', '$$$1'
    'abc' -replace 'a(\w)', "$$$1" #variable $$ and $1 is expanded before regex replace
                                   #$$ and $1 don't exist, so they are expanded to ''
    
    $$ = 'xyz'
    $1 = '123'
    'abc' -replace 'a(\w)', "$$$1`$1" #"$$$1" is expanded to 'xyz123', but `$1 is used in regex
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-02
    • 2017-01-18
    • 2022-12-04
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 2020-03-08
    相关资源
    最近更新 更多