在 Param (...) 块之间匹配 [STRING]

Matching [STRING] between Param (...) block

如果您查看下面的代码片段,我会尝试匹配 Param ( ... ) 块内的所有 [STRING] ONLY.

我从事这方面工作有一段时间了,但我似乎不知道该怎么做。我尝试使用先行、后行、递归和引用捕获组。

我目前拥有的:(?<=Param\(\s*|)(\[\w*\])

代码:

Param(
    [STRING]$CustomerName,
    [STRING]$ClusterName,
)

[STRING]$CustomerName,
[STRING]$ClusterName,

我想用正则表达式实现的是匹配所有 [STRING] 如果第一个 [STRING] 也匹配 Param (。 然后继续匹配,直到找到右大括号)

Regex101 演示:https://regex101.com/r/hVeb8R/1

我在那里使用 javascript,因为它似乎非常符合 C# 的预期功能。

.NET 支持回顾中的无限重复。在 RegEx 引擎世界中并不常见的功能。通过调用该功能,您可以使用以下方法获得所需的结果:

(?<=Param\([^()]*)\[\w+]

lookbehind 中的模式可确保在不超出括号的情况下找到 Param( 上的匹配项。 [^()] 表示在回头查找 Param( 时从不匹配括号。差不多就是这样,但是如果你想对 [STRING] 进行另一次检查,然后是一个右括号,你必须像这样附加一个积极的前瞻:

(?<=Param\([^()]*)\[\w+](?=[^()]*\))

使用 Chrome,参见 live demo here