gpt4 book ai didi

匹配 PowerShell 代码中的 "here strings"的正则表达式

转载 作者:行者123 更新时间:2023-12-05 09:31:09 24 4
gpt4 key购买 nike

我正在寻找一个正则表达式来匹配 PowerShell @'...'@@"..."@ 中的字符串 here strings

规则:

  1. 总是在开始后换行(@' or @")
  2. 结束后没有字符('@"@),它总是在行首,但是后面可以有更多的文本
  3. 外部 @' .. '@ 可能包含内部 @""@ 但在这种情况下外部将被匹配。

示例

  1. 外部(包括hello)将被匹配的例子
$MyString = @"
hello
@'
'@
bye
"@
  1. 其他匹配外部(包括hello)的例子
$MyString = @'
hello
@"
"@
bye
'@
  1. 来自微软的例子
$page = [XML] @"
<command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10"
xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10"
xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10">
<command:details>
<command:name>
Format-Table
</command:name>
<maml:description>
<maml:para>Formats the output as a table.</maml:para>
</maml:description>
<command:verb>format</command:verb>
<command:noun>table</command:noun>
<dev:version></dev:version>
</command:details>
...
</command:command>
"@

如果有任何帮助,我将不胜感激。我正在尝试解决内联以获得更好的 PowerShell 模板支持 privacy.sexy这样您的帮助就会扩大到社区中的更多人。

最佳答案

您最好使用 PowerShell 的语言解析器 System.Management.Automation.Language.Parser ,而不是基于正则表达式的解决方案。[1]

我假设您总是对此处的外部字符串感兴趣,而不是恰好嵌套在另一个字符串中的字符串。

假设文件 file.ps1具有以下逐字内容:

$MyString1 = @'
hello
@"
"@
bye
'@

$MyString2 = @"
hello
@'
'@
bye
"@

以下命令:

$ast = [System.Management.Automation.Language.Parser]::ParseInput(
(Get-Content -Raw file.ps1),
[ref] $null,
[ref] $null
)

$ast.FindAll(
{
$args[0] -is [System.Management.Automation.Language.StringConstantExpressionAst] -and
$args[0].StringConstantType -in 'SingleQuotedHereString', 'DoubleQuotedHereString'
},
$true
) | Format-Table StringConstantType, Value -Wrap

输出:

    StringConstantType Value
------------------ -----
SingleQuotedHereString hello
@"
"@
bye
DoubleQuotedHereString hello
@'
'@
bye

[1] 基于正则表达式的解决方案可能会产生误报,这几乎是无法避免的。参见 MikeM's answer举个例子;另一个是这里的字符串,恰好通过 <# ... #>注释掉

关于匹配 PowerShell 代码中的 "here strings"的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69056697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com