REGEX powershell脚本删除DEBUG标记

时间:2015-03-02 15:35:39

标签: regex powershell

我有一个powershell scrip test.ps1:

#if DEBUG
Write-Output "LOG 1"
#endif
Write-Output "LOG 2"
#if DEBUG
Write-Output "LOG 3"
#endif
Write-Output "LOG 4"

我想要一种方法来删除它们之间的代码的DEBUG标记。 我会得到这个:

Write-Output "LOG 2"
Write-Output "LOG 4"

我设法做到了这一点:

$src = "C:\test.ps1"
$out = "C:\test2.ps1"
(Get-Content $src -Raw) -creplace "(?m)^(#if DEBUG)(?s).+(?m)^(#endif)","" | Set-Content -Encoding Default $out

但输出,我只得到这个:

Write-Output "LOG 4"

我认为这是因为该命令删除了第一个标签“#if DEBUG”和最后一个标签“#endif”之间的所有内容。不考虑其他标签。

你能帮助我吗?

1 个答案:

答案 0 :(得分:0)

如下所示更改正则表达式

-creplace "(?m)^(?:#if DEBUG)[\s\S]+?\n#endif[\r\n]*",""

如有必要,再次撤消反斜杠。

DEMO